From 76ae54cd9b85531875adc9d9653f4d353aaa7318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=90=E5=AE=B6?= Date: Mon, 23 Sep 2024 20:08:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=99=E8=AF=AF=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/src/res/response.rs | 82 +++++++------------- library/src/res/status.rs | 9 ++- system/src/controller/account_controller.rs | 1 + system/src/controller/feedback_controller.rs | 16 ++-- system/src/service/account_service.rs | 2 +- system/src/service/feedback_service.rs | 2 +- 6 files changed, 49 insertions(+), 63 deletions(-) diff --git a/library/src/res/response.rs b/library/src/res/response.rs index a3b6d23..56c1776 100644 --- a/library/src/res/response.rs +++ b/library/src/res/response.rs @@ -4,6 +4,7 @@ use axum::{ response::{IntoResponse, Response}, Json, }; +use http::StatusCode; use serde::Serialize; use super::status::Status; @@ -40,8 +41,6 @@ pub enum ResErr { ErrAuth(Option), ErrPerm(Option), ErrNotFound(Option), - ErrSystem(Option), - ErrData(Option), ErrService(Option), ErrSocial(Option), ErrAccountDisable(Option), @@ -53,82 +52,66 @@ use ResErr::*; impl IntoResponse for ResErr { fn into_response(self) -> Response { let status = match self { - Error(code, msg) => Status::<()>::Err(code, msg), + Error(code, msg) => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, msg), ErrParams(msg) => { let code = 10000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("参数错误")), + Some(v) => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, v), + None => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, String::from("参数错误")), } } ErrAuth(msg) => { let code = 20000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("未授权,请先登录")), + Some(v) => Status::<()>::Err(StatusCode::UNAUTHORIZED, code, v), + None => Status::<()>::Err(StatusCode::UNAUTHORIZED, code, String::from("未授权,请先登录")), } } ErrPerm(msg) => { let code = 30000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("权限不足")), + Some(v) => Status::<()>::Err(StatusCode::FORBIDDEN, code, v), + None => Status::<()>::Err(StatusCode::FORBIDDEN, code, String::from("权限不足")), } } ErrNotFound(msg) => { let code = 40000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("数据不存在")), - } - } - ErrSystem(msg) => { - let code = 50000; - - match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("内部服务器错误,请稍后重试")), - } - } - ErrData(msg) => { - let code = 60000; - - match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("数据异常")), + Some(v) => Status::<()>::Err(StatusCode::NOT_FOUND, code, v), + None => Status::<()>::Err(StatusCode::NOT_FOUND, code, String::from("数据不存在")), } } ErrService(msg) => { - let code = 70000; + let code = 50000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("服务异常")), + Some(v) => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, v), + None => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, String::from("内部服务器错误,请稍后重试")), } } ErrSocial(msg) => { let code = 80000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("社交业务异常")), + Some(v) => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, v), + None => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, String::from("社交业务异常")), } } ErrAccountDisable(msg) => { let code = 90000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("账户已禁用")), + Some(v) => Status::<()>::Err(StatusCode::FORBIDDEN, code, v), + None => Status::<()>::Err(StatusCode::FORBIDDEN, code, String::from("账户已禁用")), } } ErrSqlx(msg) => { let code = 90000; match msg { - Some(v) => Status::<()>::Err(code, v), - None => Status::<()>::Err(code, String::from("账户已禁用")), + Some(v) => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, v), + None => Status::<()>::Err(StatusCode::INTERNAL_SERVER_ERROR, code, String::from("业务错误")), } } }; @@ -146,8 +129,6 @@ impl Display for ResErr { | ErrAuth(message) | ErrPerm(message) | ErrNotFound(message) - | ErrSystem(message) - | ErrData(message) | ErrService(message) | ErrSocial(message) | ErrAccountDisable(message) @@ -160,7 +141,7 @@ impl StdError for ResErr {} impl From for ResErr { fn from(value: String) -> Self { - ErrSystem(Some(value)) + ErrService(Some(value)) } } @@ -184,11 +165,12 @@ impl From for ResErr { impl Default for ResErr { fn default() -> Self { - ErrSystem(None) + ErrService(None) } } impl ResErr { + #[inline] pub fn error(code: i32, msg: T) -> Self where T: Into, @@ -196,6 +178,7 @@ impl ResErr { Error(code, msg.into()) } + #[inline] pub fn params(msg: T) -> Self where T: Into, @@ -203,6 +186,7 @@ impl ResErr { ErrParams(Some(msg.into())) } + #[inline] pub fn auth(msg: T) -> Self where T: Into, @@ -210,6 +194,7 @@ impl ResErr { ErrAuth(Some(msg.into())) } + #[inline] pub fn perm(msg: T) -> Self where T: Into, @@ -217,6 +202,7 @@ impl ResErr { ErrPerm(Some(msg.into())) } + #[inline] pub fn not_found(msg: T) -> Self where T: Into, @@ -224,20 +210,7 @@ impl ResErr { ErrNotFound(Some(msg.into())) } - pub fn system(msg: T) -> Self - where - T: Into, - { - ErrSystem(Some(msg.into())) - } - - pub fn data(msg: T) -> Self - where - T: Into, - { - ErrData(Some(msg.into())) - } - + #[inline] pub fn service(msg: T) -> Self where T: Into, @@ -245,6 +218,7 @@ impl ResErr { ErrService(Some(msg.into())) } + #[inline] pub fn social(msg: T) -> Self where T: Into, diff --git a/library/src/res/status.rs b/library/src/res/status.rs index ce0318d..0a8eb7c 100644 --- a/library/src/res/status.rs +++ b/library/src/res/status.rs @@ -1,3 +1,4 @@ +use http::StatusCode; use serde::Serialize; #[derive(Serialize)] @@ -5,6 +6,8 @@ pub struct Reply where T: Serialize, { + #[serde(skip_serializing)] + pub status: StatusCode, pub code: i32, pub err: bool, pub msg: String, @@ -17,7 +20,7 @@ where T: Serialize, { OK(Option), - Err(i32, String), + Err(StatusCode, i32, String), } impl Status @@ -26,6 +29,7 @@ where { pub fn to_reply(self) -> Reply { let mut resp = Reply { + status: StatusCode::OK, code: 0, err: false, msg: String::from("OK"), @@ -36,7 +40,8 @@ where Status::OK(data) => { resp.data = data; } - Status::Err(code, msg) => { + Status::Err(status, code, msg) => { + resp.status = status; resp.code = code; resp.err = true; resp.msg = msg; diff --git a/system/src/controller/account_controller.rs b/system/src/controller/account_controller.rs index c1f5201..0757863 100644 --- a/system/src/controller/account_controller.rs +++ b/system/src/controller/account_controller.rs @@ -5,6 +5,7 @@ use library::{context::{Context, WhiteContext}, res::{response::{ ResData, ResRe use crate::service; /// google账号登录 +/// post: /account/google pub async fn authenticate_google( Extension(context): Extension, Json(req): Json diff --git a/system/src/controller/feedback_controller.rs b/system/src/controller/feedback_controller.rs index feddb01..cb483d0 100644 --- a/system/src/controller/feedback_controller.rs +++ b/system/src/controller/feedback_controller.rs @@ -1,9 +1,9 @@ use axum::extract::Query; use axum::{Extension, Json}; -use library::context::Context; use domain::dto::feedback::FeedbackAdd; use domain::dto::pageable::PageParams; use domain::entities::feedback::Feedback; +use library::context::Context; use library::res::pageable::Pageable; use library::res::response::{ResData, ResResult}; use library::res::validator; @@ -13,7 +13,7 @@ use crate::service; /// 添加反馈信息 pub async fn add_feedback( Extension(context): Extension, - Json(req): Json + Json(req): Json, ) -> ResResult> { validator::validate_params(&req, context.get_lang_tag())?; service::feedback_service::add_feedback(context, req).await @@ -22,7 +22,13 @@ pub async fn add_feedback( /// 获取反馈信息列表 pub async fn get_feedback_list_by_page( Extension(context): Extension, - Query(page_params): Query + Query(page_params): Query, ) -> ResResult>> { - service::feedback_service::get_feedback_list_by_page(context, page_params.page.unwrap(), page_params.page_size.unwrap()).await -} \ No newline at end of file + validator::validate_params(&page_params, context.get_lang_tag())?; + service::feedback_service::get_feedback_list_by_page( + context, + page_params.page.unwrap(), + page_params.page_size.unwrap(), + ) + .await +} diff --git a/system/src/service/account_service.rs b/system/src/service/account_service.rs index c35d2a0..7266b5e 100644 --- a/system/src/service/account_service.rs +++ b/system/src/service/account_service.rs @@ -48,7 +48,7 @@ pub async fn authenticate_google( if let Some(disable_time) = account.disable_time { if disable_time > Utc::now() { tracing::error!("账户已禁用"); - return Err(ResErr::system(message!(context.get_lang_tag(), ACCOUNT_DISABLED))); + return Err(ResErr::service(message!(context.get_lang_tag(), ACCOUNT_DISABLED))); } } diff --git a/system/src/service/feedback_service.rs b/system/src/service/feedback_service.rs index 1f1d66d..cdf70cb 100644 --- a/system/src/service/feedback_service.rs +++ b/system/src/service/feedback_service.rs @@ -50,7 +50,7 @@ pub async fn add_feedback( } Err(err) => { tracing::error!(error = ?err, "添加反馈信息失败"); - return Err(library::res::response::ResErr::ErrSystem(None)); + return Err(library::res::response::ResErr::ErrService(None)); } }