修改了convertedwindspeed为float
This commit is contained in:
50
src/main.rs
50
src/main.rs
@@ -144,46 +144,30 @@ async fn login(
|
||||
}
|
||||
};
|
||||
|
||||
// 检查用户是否已存在,不存在则创建
|
||||
let query = r#"
|
||||
INSERT INTO users (openid, name, type)
|
||||
VALUES ($1, left($1, 8), 2)
|
||||
ON CONFLICT (openid) DO NOTHING
|
||||
RETURNING id
|
||||
"#;
|
||||
// 【核心修改】使用标准的 UPSERT 语法,原子性地创建或获取用户
|
||||
let upsert_query = r#"
|
||||
INSERT INTO users (openid, name, type)
|
||||
VALUES ($1, left($1, 8), 2)
|
||||
ON CONFLICT (openid) DO UPDATE SET
|
||||
-- 这里可以更新一些需要变更的字段,例如最后登录时间
|
||||
-- 如果没有需要更新的,可以使用一个技巧来确保 RETURNING 总是有效
|
||||
id = users.id
|
||||
RETURNING id
|
||||
"#;
|
||||
|
||||
let user_id = match sqlx::query_as::<_, (i32,)>(query)
|
||||
// 使用 fetch_one,因为我们确定这个查询总能返回一个 id
|
||||
let user_id = match sqlx::query_as::<_, (i32,)>(upsert_query)
|
||||
.bind(&openid)
|
||||
.fetch_optional(pool.get_ref())
|
||||
.fetch_one(pool.get_ref()) // <--- 注意这里是 fetch_one
|
||||
.await
|
||||
{
|
||||
Ok(Some((id,))) => {
|
||||
info!("用户已存在,用户ID: {}", id);
|
||||
Ok((id,)) => {
|
||||
// 无论是新用户还是老用户,都成功获取了 ID
|
||||
info!("用户登录/注册成功,用户ID: {}", id);
|
||||
id
|
||||
}
|
||||
Ok(None) => {
|
||||
// 新用户创建成功,查询ID
|
||||
match sqlx::query_as::<_, (i32,)>("SELECT id FROM users WHERE openid = $1")
|
||||
.bind(&openid)
|
||||
.fetch_one(pool.get_ref())
|
||||
.await
|
||||
{
|
||||
Ok((id,)) => {
|
||||
info!("新用户创建成功,用户ID: {}", id);
|
||||
id
|
||||
}
|
||||
Err(e) => {
|
||||
error!("新用户创建后查询ID失败: {}", e);
|
||||
return HttpResponse::InternalServerError().json(ErrorResponse {
|
||||
error: "创建用户后查询ID失败".to_string(),
|
||||
errcode: Some(500),
|
||||
errmsg: Some(e.to_string()),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
error!("用户查询/创建失败: {}", e);
|
||||
error!("用户信息处理失败: {}", e);
|
||||
return HttpResponse::InternalServerError().json(ErrorResponse {
|
||||
error: "用户信息处理失败".to_string(),
|
||||
errcode: Some(500),
|
||||
|
||||
Reference in New Issue
Block a user