fix: insert_weather_data 配额查询使用已重命名的 membership_expires_at 列

This commit is contained in:
2026-07-19 09:52:35 +08:00
parent 51752f2d4d
commit 941a8e5350

View File

@@ -11,17 +11,18 @@ use crate::error::AppError;
pub async fn insert_weather_data(pool: &PgPool, weather_data: &WeatherData, user_id: i32) -> Result<i32, AppError> {
// 单次查询获取用户会员状态和数据条数(原 N+1get_user_by_id + count_user_weather_data → 合并为 1 次)
#[derive(FromRow)]
struct UserQuota {
is_member: bool,
paid_expires_at: Option<chrono::DateTime<Utc>>,
data_count: i64,
}
struct UserQuota {
is_member: bool,
#[sqlx(rename = "membership_expires_at")]
membership_expires_at: Option<chrono::DateTime<Utc>>,
data_count: i64,
}
let quota = sqlx::query_as::<_, UserQuota>(
r#"
SELECT
u.is_member,
u.paid_expires_at,
u.membership_expires_at,
(SELECT COUNT(*) FROM weather_data w WHERE w.user_id = $1)::BIGINT AS data_count
FROM users u
WHERE u.id = $1
@@ -33,7 +34,7 @@ pub async fn insert_weather_data(pool: &PgPool, weather_data: &WeatherData, user
.map_err(|e| AppError::Database(format!("查询用户配额失败: {}", e)))?
.ok_or_else(|| AppError::NotFound("用户不存在".to_string()))?;
let is_active_member = quota.is_member && quota.paid_expires_at.is_none_or(|expires| expires > Utc::now());
let is_active_member = quota.is_member && quota.membership_expires_at.is_none_or(|expires| expires > Utc::now());
// 维护模式:非会员使用更高的临时限额,防止资源滥用
let is_maintenance = std::env::var("PAYMENT_MAINTENANCE_MODE").ok() == Some("true".to_string());