diff --git a/README.MD b/README.MD index 2ea6b33..c3827eb 100644 --- a/README.MD +++ b/README.MD @@ -1,5 +1,5 @@ ### todo - [*] 使用Extractor方式提取数据,包括Body、Query和Path - [ ] multipart/form-data的实现 -- [ ] 参考example中的jwt实现方式,移除context对extension的依赖?那么language-tag该怎么处理? +- [*] 参考example中的jwt实现方式,移除context对extension的依赖?那么language-tag该怎么处理? - [ ] 参考rocket,移除参数的元组类型 diff --git a/library/src/model/mod.rs b/library/src/model/mod.rs index 3ae0378..0cf7839 100644 --- a/library/src/model/mod.rs +++ b/library/src/model/mod.rs @@ -1 +1,2 @@ -pub mod response; \ No newline at end of file +pub mod response; +pub mod validator; \ No newline at end of file diff --git a/library/src/validator/validator.rs b/library/src/model/validator.rs similarity index 100% rename from library/src/validator/validator.rs rename to library/src/model/validator.rs diff --git a/library/src/validator/body_validator.rs b/library/src/validator/body_extractor.rs similarity index 94% rename from library/src/validator/body_validator.rs rename to library/src/validator/body_extractor.rs index 8f96859..6c683ee 100644 --- a/library/src/validator/body_validator.rs +++ b/library/src/validator/body_extractor.rs @@ -45,7 +45,7 @@ where match axum::Json::::from_request(req, state).await { Ok(value) => { let data = value.0; - match super::validator::validate_params(&data, lang_tag) { + match crate::model::validator::validate_params(&data, lang_tag) { Ok(_) => return Ok(Self(data)), Err(err) => return Err(err), } @@ -60,7 +60,7 @@ where match axum::Form::::from_request(req, state).await { Ok(value) => { let data = value.0; - match super::validator::validate_params(&data, lang_tag) { + match crate::model::validator::validate_params(&data, lang_tag) { Ok(_) => return Ok(Self(data)), Err(err) => return Err(err), } diff --git a/library/src/validator/context_extractor.rs b/library/src/validator/context_extractor.rs new file mode 100644 index 0000000..2cb04eb --- /dev/null +++ b/library/src/validator/context_extractor.rs @@ -0,0 +1,18 @@ +use axum::{async_trait, extract::FromRequestParts}; +use http::request::Parts; + +use crate::{context::Context, model::response::ResErr}; + + +#[async_trait] +impl FromRequestParts for Context +where + S: Send + Sync, +{ + type Rejection = ResErr; + + async fn from_request_parts(parts: &mut Parts, _: &S) -> Result { + let context: &Context = parts.extensions.get().unwrap(); + Ok(context.clone()) + } +} \ No newline at end of file diff --git a/library/src/validator/mod.rs b/library/src/validator/mod.rs index 099d689..c38932e 100644 --- a/library/src/validator/mod.rs +++ b/library/src/validator/mod.rs @@ -1,4 +1,4 @@ -pub mod validator; -pub mod query_validator; -pub mod path_validator; -pub mod body_validator; \ No newline at end of file +pub mod query_extractor; +pub mod path_extractor; +pub mod body_extractor; +pub mod context_extractor; \ No newline at end of file diff --git a/library/src/validator/path_validator.rs b/library/src/validator/path_extractor.rs similarity index 100% rename from library/src/validator/path_validator.rs rename to library/src/validator/path_extractor.rs diff --git a/library/src/validator/query_validator.rs b/library/src/validator/query_extractor.rs similarity index 91% rename from library/src/validator/query_validator.rs rename to library/src/validator/query_extractor.rs index 2475a4d..00e569b 100644 --- a/library/src/validator/query_validator.rs +++ b/library/src/validator/query_extractor.rs @@ -23,7 +23,7 @@ where let context: &Context = parts.extensions.get().unwrap(); if let Ok(Query(data)) = query { - match super::validator::validate_params(&data, context.get_lang_tag()) { + match crate::model::validator::validate_params(&data, context.get_lang_tag()) { Ok(_) => Ok(Self(data)), Err(err) => Err(err), } diff --git a/server/src/controller/account_controller.rs b/server/src/controller/account_controller.rs index c4b620c..344b50a 100644 --- a/server/src/controller/account_controller.rs +++ b/server/src/controller/account_controller.rs @@ -1,6 +1,5 @@ -use axum::Extension; use domain::{dto::account::{AuthenticateGooleAccountReq, AuthenticateWithPassword, RefreshToken}, vo::account::{LoginAccount, RefreshTokenResult}}; -use library::{context::Context, model::response::ResResult, validator::body_validator::JsonBody}; +use library::{context::Context, model::response::ResResult, validator::body_extractor::JsonBody}; use crate::service; @@ -8,7 +7,7 @@ use crate::service; /// /// google账号登录 pub async fn authenticate_google( - Extension(context): Extension, + context: Context, JsonBody(req): JsonBody ) -> ResResult { service::account_service::authenticate_google(context, req).await @@ -18,7 +17,7 @@ pub async fn authenticate_google( /// /// 账号密码登录 pub async fn authenticate_with_password( - Extension(context): Extension, + context: Context, JsonBody(req): JsonBody ) -> ResResult { service::sys_account_service::authenticate_with_password(context, req).await @@ -28,7 +27,7 @@ pub async fn authenticate_with_password( /// /// 刷新token pub async fn refresh_token( - Extension(context): Extension, + context: Context, JsonBody(refresh_token): JsonBody ) -> ResResult { tracing::debug!("刷新token, {:?}", context); diff --git a/server/src/controller/feedback_controller.rs b/server/src/controller/feedback_controller.rs index fe33b22..9ee21c8 100644 --- a/server/src/controller/feedback_controller.rs +++ b/server/src/controller/feedback_controller.rs @@ -1,11 +1,10 @@ -use axum::Extension; use domain::dto::feedback::FeedbackAdd; use domain::dto::pageable::PageParams; use domain::vo::feedback::FeedbackPageable; use library::context::Context; use library::model::response::ResResult; -use library::validator::body_validator::JsonBody; -use library::validator::query_validator::QueryParams; +use library::validator::body_extractor::JsonBody; +use library::validator::query_extractor::QueryParams; use crate::service; @@ -13,7 +12,7 @@ use crate::service; /// /// 添加反馈信息 pub async fn add_feedback( - Extension(context): Extension, + context: Context, JsonBody(req): JsonBody, ) -> ResResult<()> { service::feedback_service::add_feedback(context, req).await @@ -23,7 +22,7 @@ pub async fn add_feedback( /// /// 获取反馈信息列表 pub async fn get_feedback_list_by_page( - Extension(context): Extension, + context: Context, QueryParams(page_params): QueryParams, ) -> ResResult { service::feedback_service::get_feedback_list_by_page(