修改了convertedwindspeed为float

This commit is contained in:
2025-10-17 19:39:12 +08:00
parent e294c00c0b
commit bd60a72e68
3 changed files with 20 additions and 37 deletions

View File

@@ -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),