添加了weatherlistresponse并进行了一些修改
This commit is contained in:
124
src/main.rs
124
src/main.rs
@@ -1,8 +1,7 @@
|
||||
use actix_web::middleware::from_fn;
|
||||
use actix_web::{App, HttpResponse, HttpServer, Responder, Result, post, web};
|
||||
use actix_web::{App, HttpResponse, HttpServer, Responder, Result, delete, get, post, web};
|
||||
use reqwest::Client;
|
||||
use sqlx::postgres::PgPool;
|
||||
|
||||
mod auth;
|
||||
mod db;
|
||||
mod models;
|
||||
@@ -11,6 +10,8 @@ use auth::{generate_token, jwt_middleware};
|
||||
use db::{create_pool, insert_weather_data};
|
||||
use models::{ErrorResponse, WeChatApiResponse, WeChatLoginRequest, WeatherData};
|
||||
|
||||
use crate::models::Claims;
|
||||
|
||||
// 登录的API端点
|
||||
#[post("/api/login")]
|
||||
async fn login(
|
||||
@@ -199,6 +200,120 @@ async fn post_weather_data(
|
||||
}
|
||||
}
|
||||
|
||||
// 在main.rs中添加以下处理函数
|
||||
|
||||
// 获取天气数据详情
|
||||
#[get("/weather/details/{id}")]
|
||||
async fn get_weather_details(
|
||||
path: web::Path<i32>,
|
||||
pool: web::Data<PgPool>,
|
||||
claims: web::ReqData<Claims>,
|
||||
) -> impl Responder {
|
||||
let weather_id = path.into_inner();
|
||||
println!("获取天气数据详情, ID: {}", weather_id);
|
||||
|
||||
match db::get_weather_details(pool.get_ref(), weather_id).await {
|
||||
Ok(weather_data) => {
|
||||
// 检查数据是否属于当前用户
|
||||
if weather_data.openid != claims.openid {
|
||||
return HttpResponse::Forbidden().json(ErrorResponse {
|
||||
error: "无权限访问该数据".to_string(),
|
||||
errcode: Some(403),
|
||||
errmsg: None,
|
||||
});
|
||||
}
|
||||
|
||||
HttpResponse::Ok().json(serde_json::json!({
|
||||
"success": true,
|
||||
"data": weather_data
|
||||
}))
|
||||
}
|
||||
Err(error_msg) => {
|
||||
eprintln!("获取天气数据详情失败: {}", error_msg);
|
||||
let errcode = if error_msg.starts_with("未找到") {
|
||||
404
|
||||
} else {
|
||||
500
|
||||
};
|
||||
HttpResponse::Ok().json(serde_json::json!({
|
||||
"success": false,
|
||||
"errcode": errcode,
|
||||
"errmsg": error_msg
|
||||
}))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 修改main.rs中的get_weather函数
|
||||
#[get("/weather")]
|
||||
async fn get_weather(
|
||||
query: web::Query<serde_json::Value>,
|
||||
pool: web::Data<PgPool>,
|
||||
claims: web::ReqData<Claims>,
|
||||
) -> impl Responder {
|
||||
let page = query.get("page").and_then(|v| v.as_i64()).unwrap_or(1) as i32;
|
||||
let limit = query.get("limit").and_then(|v| v.as_i64()).unwrap_or(10) as i32;
|
||||
|
||||
println!("获取天气数据列表, 页码: {}, 每页条数: {}", page, limit);
|
||||
|
||||
match db::get_weather_list(pool.get_ref(), claims.user_id, page, limit).await {
|
||||
Ok(response) => {
|
||||
// 这里的response是WeatherListResponse类型
|
||||
// 打印获取到的天气列表和总数
|
||||
println!(
|
||||
"获取到的天气列表: {:?}, 总条数: {}",
|
||||
response.list, response.total
|
||||
);
|
||||
HttpResponse::Ok().json(serde_json::json!({
|
||||
"success": true,
|
||||
"data": response.list, // 分页数据
|
||||
"page": page,
|
||||
"limit": limit,
|
||||
"total": response.total // 总条数(关键修改)
|
||||
}))
|
||||
}
|
||||
Err(error_msg) => {
|
||||
eprintln!("获取天气数据列表失败: {}", error_msg);
|
||||
HttpResponse::Ok().json(serde_json::json!({
|
||||
"success": false,
|
||||
"errcode": 500,
|
||||
"errmsg": error_msg
|
||||
}))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 删除天气数据
|
||||
#[delete("/weather/delete/{id}")]
|
||||
async fn delete_weather(
|
||||
path: web::Path<i32>,
|
||||
pool: web::Data<PgPool>,
|
||||
claims: web::ReqData<Claims>,
|
||||
) -> impl Responder {
|
||||
let weather_id = path.into_inner();
|
||||
println!("删除天气数据, ID: {}", weather_id);
|
||||
|
||||
match db::delete_weather_data(pool.get_ref(), weather_id, claims.user_id).await {
|
||||
Ok(_) => HttpResponse::Ok().json(serde_json::json!({
|
||||
"success": true,
|
||||
"message": format!("天气数据 {} 已成功删除", weather_id)
|
||||
})),
|
||||
Err(error_msg) => {
|
||||
eprintln!("删除天气数据失败: {}", error_msg);
|
||||
let errcode = if error_msg.starts_with("未找到") {
|
||||
404
|
||||
} else {
|
||||
500
|
||||
};
|
||||
HttpResponse::Ok().json(serde_json::json!({
|
||||
"success": false,
|
||||
"errcode": errcode,
|
||||
"errmsg": error_msg
|
||||
}))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 创建服务器配置的函数
|
||||
fn create_server_config(
|
||||
pool: PgPool,
|
||||
@@ -221,7 +336,10 @@ fn create_server_config(
|
||||
.service(
|
||||
web::scope("")
|
||||
.wrap(from_fn(jwt_middleware)) // 关键修改:用 from_fn 包装
|
||||
.service(post_weather_data),
|
||||
.service(post_weather_data)
|
||||
.service(get_weather_details) // 新增
|
||||
.service(get_weather) // 新增
|
||||
.service(delete_weather), // 新增
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user