From bd3e18dd8d4f4bec366c67efe12464a1c2790e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=90=E5=AE=B6?= Date: Tue, 1 Oct 2024 08:33:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84query=5Fvalidator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domain/src/entities/feedback.rs | 2 +- library/src/middleware/req_ctx.rs | 5 ++++- library/src/model/query_validator.rs | 13 ++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/domain/src/entities/feedback.rs b/domain/src/entities/feedback.rs index f263b57..10267f1 100644 --- a/domain/src/entities/feedback.rs +++ b/domain/src/entities/feedback.rs @@ -22,7 +22,7 @@ impl Feedback { Feedback, r#"select id, user_id, content, created_at from feedback limit $1 offset $2"#, page_size, - page + (page - 1) * page_size ) .fetch_all(db_pool) .await diff --git a/library/src/middleware/req_ctx.rs b/library/src/middleware/req_ctx.rs index 5f8e024..8804fb8 100644 --- a/library/src/middleware/req_ctx.rs +++ b/library/src/middleware/req_ctx.rs @@ -66,7 +66,10 @@ pub async fn authenticate_ctx(mut req: Request, next: Next) -> Response { // if account.token != token { // return (StatusCode::UNAUTHORIZED, "Invalid token".to_string()).into_response(); // } - let language = account.account.clone().lang_tag.clone(); + let mut language = account.account.clone().lang_tag.clone(); + if language.is_empty() { + language = request_util::get_lang_tag(req.headers()); + } // 将Claims附加到请求扩展中,以便后续处理使用 req.extensions_mut().insert( Context { diff --git a/library/src/model/query_validator.rs b/library/src/model/query_validator.rs index ad5fc54..02e4d05 100644 --- a/library/src/model/query_validator.rs +++ b/library/src/model/query_validator.rs @@ -3,7 +3,7 @@ use http::Request; use i18n::{message, message_ids::MessageId}; use validator::Validate; -use crate::utils::request_util; +use crate::context::Context; use super::response::ResErr; @@ -19,20 +19,19 @@ where type Rejection = ResErr; async fn from_request(req: http::Request, state: &S) -> Result { - // let context = req.extensions().get().unwrap(); - let (parts, body) = req.into_parts(); - let header = &parts.headers; let query = Query::::from_request(Request::from_parts(parts.clone(), body), state).await; - let lang_tag = request_util::get_lang_tag(header); + + let context: &Context = parts.extensions.get().unwrap(); + tracing::info!("{:?}", context); if let Ok(Query(data)) = query { - match super::validator::validate_params(&data, &lang_tag) { + match super::validator::validate_params(&data, context.get_lang_tag()) { Ok(_) => Ok(QueryValidator(data)), Err(err) => Err(err), } } else { - let err = Err(ResErr::params(message!(&lang_tag, MessageId::InvalidParams))); + let err = Err(ResErr::params(message!(context.get_lang_tag(), MessageId::InvalidParams))); err } }