use chrono::NaiveDate; use serde::{Deserialize, Serialize}; use sqlx::FromRow; // 定义JWT载荷结构体 #[derive(Debug, Serialize, Deserialize, Clone)] pub struct Claims { // 标准字段:过期时间(必须) pub exp: i64, // 时间戳(秒) // 标准字段:签发时间 pub iat: i64, // 自定义字段:用户ID(根据业务需求添加) pub user_id: i32, // 自定义字段:openid(可选) pub openid: String, // 自定义字段:user_ytpe pub user_type: i32, } #[derive(Debug, Deserialize)] pub struct WeChatLoginRequest { pub code: String, } #[derive(Debug, Deserialize)] pub struct WeChatApiResponse { pub openid: Option, pub errcode: Option, pub errmsg: Option, } #[derive(Debug, Serialize)] pub struct ErrorResponse { pub error: String, pub errcode: Option, pub errmsg: Option, } // 天气数据结构体(修改后) #[derive(Debug, Deserialize, Serialize, FromRow)] // 添加 FromRow 派生 pub struct WeatherData { // 添加 id 字段(数据库中应该有这个主键) #[serde(skip_deserializing)] // 1. 反序列化时忽略该字段; #[sqlx(rename = "id")] // 数据库表的 id 列(自增主键),查询映射时使用 pub id: i32, #[serde(rename = "areaType")] #[sqlx(rename = "areatype")] // 数据库列名是小写下划线式 pub area_type: String, #[serde(rename = "assignmentnumber")] #[sqlx(rename = "assignmentnumber")] pub assignment_number: String, #[serde(rename = "atmosphericStability")] #[sqlx(rename = "atmosphericstability")] pub atmospheric_stability: String, #[serde(rename = "averageWindDirection")] #[sqlx(rename = "averagewinddirection")] pub average_wind_direction: f64, #[serde(rename = "averageWindSpeed")] #[sqlx(rename = "averagewindspeed")] pub average_wind_speed: f64, #[serde(rename = "calculatedwindspeed")] #[sqlx(rename = "calculatedwindspeed")] pub calculated_wind_speed: f64, #[serde(rename = "cloudIndex")] #[sqlx(rename = "cloudindex")] pub cloud_index: String, #[serde(rename = "convertedWindSpeed")] #[sqlx(rename = "convertedwindspeed")] pub converted_wind_speed: f64, pub date: NaiveDate, #[serde(rename = "daySinceJanFirst")] #[sqlx(rename = "daysincejanfirst")] pub day_since_jan_first: i32, #[serde(rename = "hasMeasuredWindSpeed")] #[sqlx(rename = "hasmeasuredwindspeed")] pub has_measured_wind_speed: bool, #[serde(rename = "hours")] #[sqlx(rename = "hour")] // 数据库中是 hour 字段 pub hours: i32, #[serde(rename = "inspectiontype")] #[sqlx(rename = "inspectiontype")] pub inspection_type: String, pub latitude: f64, pub longitude: f64, #[serde(rename = "lowCloudiness")] #[sqlx(rename = "lowcloudiness")] pub low_cloudiness: String, #[serde(rename = "measuredWindSpeed")] #[sqlx(rename = "measuredwindspeed")] pub measured_wind_speed: f64, #[serde(rename = "measurementHeight")] #[sqlx(rename = "measurementheight")] pub measurement_height: f64, #[serde(rename = "min")] #[sqlx(rename = "min")] pub min: i32, pub openid: String, #[serde(rename = "overallCloudiness")] #[sqlx(rename = "overallcloudiness")] pub overall_cloudiness: String, #[serde(rename = "overallSuitability")] #[sqlx(rename = "overallsuitability")] pub overall_suitability: String, #[serde(rename = "pointWindSpeed")] #[sqlx(rename = "pointwindspeed")] pub point_wind_speed: f64, #[serde(rename = "solarDeclination")] #[sqlx(rename = "solardeclination")] pub solar_declination: f64, #[serde(rename = "solarRadiationLevel")] #[sqlx(rename = "solarradiationlevel")] pub solar_radiation_level: f64, #[serde(rename = "suitabilityDegree")] #[sqlx(rename = "suitabilitydegree")] pub suitability_degree: String, #[serde(rename = "sunAltitude")] #[sqlx(rename = "sunaltitude")] pub sun_altitude: f64, pub theta: f64, pub title: String, #[serde(rename = "windDirection")] #[sqlx(rename = "winddirection")] pub wind_direction: Vec, #[serde(rename = "windDirectionStandardDeviation")] #[sqlx(rename = "winddirectionstandarddeviation")] pub wind_direction_standard_deviation: f64, #[serde(rename = "windDirectionSuitability")] #[sqlx(rename = "winddirectionsuitability")] pub wind_direction_suitability: String, #[serde(rename = "windSpeed")] #[sqlx(rename = "windspeed")] pub wind_speed: Vec, #[serde(rename = "windSpeedSuitability")] #[sqlx(rename = "windspeedsuitability")] pub wind_speed_suitability: String, } #[derive(Debug, Serialize, FromRow)] pub struct User { pub id: i32, #[serde(rename = "name")] #[sqlx(rename = "name")] pub name: String, #[sqlx(rename = "openid")] pub openid: Option, #[sqlx(rename = "phone")] pub phone: Option, #[serde(rename = "type")] #[sqlx(rename = "type")] pub user_type: i32, #[serde(rename = "desc")] #[sqlx(rename = "desc")] pub description: Option, }