增加校验错误信息处理
This commit is contained in:
parent
b0e6948560
commit
a04c65848a
@ -1,19 +1,18 @@
|
|||||||
use axum::{Extension, Json};
|
use axum::{Extension, Json};
|
||||||
use domain::{dto::account::{AuthenticateGooleAccountReq, AuthenticateWithPassword, RefreshToken}, vo::account::{LoginAccount, RefreshTokenResult}};
|
use domain::{dto::account::{AuthenticateGooleAccountReq, AuthenticateWithPassword, RefreshToken}, vo::account::{LoginAccount, RefreshTokenResult}};
|
||||||
use library::{cache::account_cache::CacheAccount, resp::response::{ ResData, ResResult}};
|
use library::{cache::account_cache::CacheAccount, res::{response::{ ResData, ResResult}, validator}};
|
||||||
use validator::Validate;
|
|
||||||
|
|
||||||
pub async fn authenticate_google(
|
pub async fn authenticate_google(
|
||||||
Json(req): Json<AuthenticateGooleAccountReq>
|
Json(req): Json<AuthenticateGooleAccountReq>
|
||||||
) -> ResResult<ResData<LoginAccount>> {
|
) -> ResResult<ResData<LoginAccount>> {
|
||||||
req.validate()?;
|
validator::validate_params(&req, "")?;
|
||||||
service::account::authenticate_google(req).await
|
service::account::authenticate_google(req).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn authenticate_with_password(
|
pub async fn authenticate_with_password(
|
||||||
Json(req): Json<AuthenticateWithPassword>
|
Json(req): Json<AuthenticateWithPassword>
|
||||||
) -> ResResult<ResData<LoginAccount>> {
|
) -> ResResult<ResData<LoginAccount>> {
|
||||||
req.validate()?;
|
validator::validate_params(&req, "")?;
|
||||||
service::sys_account::authenticate_with_password(req).await
|
service::sys_account::authenticate_with_password(req).await
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,6 +21,6 @@ pub async fn refresh_token(
|
|||||||
Json(refresh_token): Json<RefreshToken>
|
Json(refresh_token): Json<RefreshToken>
|
||||||
) -> ResResult<ResData<RefreshTokenResult>> {
|
) -> ResResult<ResData<RefreshTokenResult>> {
|
||||||
tracing::debug!("刷新token, {:?}", account);
|
tracing::debug!("刷新token, {:?}", account);
|
||||||
refresh_token.validate()?;
|
validator::validate_params(&refresh_token, "")?;
|
||||||
service::account::refresh_token(account, refresh_token.token).await
|
service::account::refresh_token(account, refresh_token.token).await
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@ use validator::Validate;
|
|||||||
use domain::dto::feedback::FeedbackAdd;
|
use domain::dto::feedback::FeedbackAdd;
|
||||||
use domain::dto::pageable::PageParams;
|
use domain::dto::pageable::PageParams;
|
||||||
use domain::entities::feedback::Feedback;
|
use domain::entities::feedback::Feedback;
|
||||||
use library::resp::pageable::Pageable;
|
use library::res::pageable::Pageable;
|
||||||
use library::resp::response::{ResData, ResResult};
|
use library::res::response::{ResData, ResResult};
|
||||||
|
|
||||||
/// 添加反馈信息
|
/// 添加反馈信息
|
||||||
pub async fn add_feedback(
|
pub async fn add_feedback(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
extern crate self as library;
|
extern crate self as library;
|
||||||
|
|
||||||
pub mod core;
|
pub mod core;
|
||||||
pub mod resp;
|
pub mod res;
|
||||||
pub mod middleware;
|
pub mod middleware;
|
||||||
pub mod token;
|
pub mod token;
|
||||||
pub mod social;
|
pub mod social;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::resp::response::ResErr;
|
use crate::res::response::ResErr;
|
||||||
use axum::body::Body;
|
use axum::body::Body;
|
||||||
use axum::extract::Request;
|
use axum::extract::Request;
|
||||||
use axum::http::header::CONTENT_TYPE;
|
use axum::http::header::CONTENT_TYPE;
|
||||||
|
4
library/src/res/mod.rs
Normal file
4
library/src/res/mod.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
pub mod response;
|
||||||
|
pub mod status;
|
||||||
|
pub mod pageable;
|
||||||
|
pub mod validator;
|
@ -24,7 +24,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <T: Serialize> ResData<T> {
|
impl<T: Serialize> ResData<T> {
|
||||||
pub fn none() -> Self {
|
pub fn none() -> Self {
|
||||||
ResData(None)
|
ResData(None)
|
||||||
}
|
}
|
||||||
@ -45,7 +45,7 @@ pub enum ResErr {
|
|||||||
ErrService(Option<String>),
|
ErrService(Option<String>),
|
||||||
ErrSocial(Option<String>),
|
ErrSocial(Option<String>),
|
||||||
ErrAccountDisable(Option<String>),
|
ErrAccountDisable(Option<String>),
|
||||||
ErrSqlx(Option<String>)
|
ErrSqlx(Option<String>),
|
||||||
}
|
}
|
||||||
|
|
||||||
use ResErr::*;
|
use ResErr::*;
|
||||||
@ -189,42 +189,68 @@ impl Default for ResErr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ResErr {
|
impl ResErr {
|
||||||
pub fn error<T>(code: i32, msg: T) -> Self where T: Into<String> {
|
pub fn error<T>(code: i32, msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
Error(code, msg.into())
|
Error(code, msg.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn params<T>(msg: T) -> Self where T: Into<String> {
|
pub fn params<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrParams(Some(msg.into()))
|
ErrParams(Some(msg.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn auth<T>(msg: T) -> Self where T: Into<String> {
|
pub fn auth<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrAuth(Some(msg.into()))
|
ErrAuth(Some(msg.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn perm<T>(msg: T) -> Self where T: Into<String> {
|
pub fn perm<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrPerm(Some(msg.into()))
|
ErrPerm(Some(msg.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn not_found<T>(msg: T) -> Self where T: Into<String> {
|
pub fn not_found<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrNotFound(Some(msg.into()))
|
ErrNotFound(Some(msg.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn system<T>(msg: T) -> Self where T: Into<String> {
|
pub fn system<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrSystem(Some(msg.into()))
|
ErrSystem(Some(msg.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn data<T>(msg: T) -> Self where T: Into<String> {
|
pub fn data<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrData(Some(msg.into()))
|
ErrData(Some(msg.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn service<T>(msg: T) -> Self where T: Into<String> {
|
pub fn service<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrService(Some(msg.into()))
|
ErrService(Some(msg.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn social<T>(msg: T) -> Self where T: Into<String> {
|
pub fn social<T>(msg: T) -> Self
|
||||||
|
where
|
||||||
|
T: Into<String>,
|
||||||
|
{
|
||||||
ErrSocial(Some(msg.into()))
|
ErrSocial(Some(msg.into()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub type ResResult<T> = std::result::Result<T, ResErr>;
|
pub type ResResult<T> = std::result::Result<T, ResErr>;
|
44
library/src/res/validator.rs
Normal file
44
library/src/res/validator.rs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
use std::borrow::Cow;
|
||||||
|
|
||||||
|
use validator::Validate;
|
||||||
|
|
||||||
|
use super::response::{ResData, ResErr, ResResult};
|
||||||
|
|
||||||
|
pub fn validate_params(params: &impl Validate, _local: &str) -> ResResult<ResData<()>> {
|
||||||
|
params.validate().map_err(|e| {
|
||||||
|
let mut errors = vec![];
|
||||||
|
for (_, err) in e.errors().iter() {
|
||||||
|
match err {
|
||||||
|
validator::ValidationErrorsKind::Struct(err) => {
|
||||||
|
err.field_errors().iter().for_each(|(_field, errs)| {
|
||||||
|
errs.iter().for_each(|e| {
|
||||||
|
if let Some(Cow::Owned(msg)) = e.message.clone() {
|
||||||
|
errors.push(msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
validator::ValidationErrorsKind::List(err) => {
|
||||||
|
for (_, err) in err.iter() {
|
||||||
|
err.field_errors().iter().for_each(|(_field, errs)| {
|
||||||
|
errs.iter().for_each(|e| {
|
||||||
|
if let Some(Cow::Owned(msg)) = e.message.clone() {
|
||||||
|
errors.push(msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validator::ValidationErrorsKind::Field(err) => {
|
||||||
|
err.iter().for_each(|e| {
|
||||||
|
if let Some(Cow::Owned(msg)) = e.message.clone() {
|
||||||
|
errors.push(msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
ResErr::params(errors.join(";"))
|
||||||
|
})?;
|
||||||
|
Result::Ok(ResData::none())
|
||||||
|
}
|
@ -1,3 +0,0 @@
|
|||||||
pub mod response;
|
|
||||||
pub mod status;
|
|
||||||
pub mod pageable;
|
|
@ -8,7 +8,7 @@ use reqwest::Client;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
use crate::resp::response::ResErr;
|
use crate::res::response::ResErr;
|
||||||
|
|
||||||
use super::SocialResult;
|
use super::SocialResult;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ use reqwest::Client;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
use crate::resp::response::ResErr;
|
use crate::res::response::ResErr;
|
||||||
|
|
||||||
use super::SocialResult;
|
use super::SocialResult;
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ use domain::dto::account::AuthenticateGooleAccountReq;
|
|||||||
use domain::entities::account::Account;
|
use domain::entities::account::Account;
|
||||||
use domain::vo::account::{LoginAccount, RefreshTokenResult};
|
use domain::vo::account::{LoginAccount, RefreshTokenResult};
|
||||||
use library::cache::account_cache::{CacheAccount, LOGIN_CACHE};
|
use library::cache::account_cache::{CacheAccount, LOGIN_CACHE};
|
||||||
use library::resp::response::ResErr::ErrPerm;
|
use library::res::response::ResErr::ErrPerm;
|
||||||
use library::resp::response::{ResData, ResErr, ResResult};
|
use library::res::response::{ResData, ResErr, ResResult};
|
||||||
use library::social::google::GOOGLE_SOCIAL;
|
use library::social::google::GOOGLE_SOCIAL;
|
||||||
use library::token::{generate_refresh_token, generate_token};
|
use library::token::{generate_refresh_token, generate_token};
|
||||||
use library::{db, token};
|
use library::{db, token};
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
use domain::dto::feedback::FeedbackAdd;
|
use domain::dto::feedback::FeedbackAdd;
|
||||||
use domain::entities::feedback::Feedback;
|
use domain::entities::feedback::Feedback;
|
||||||
use library::db;
|
use library::db;
|
||||||
use library::resp::pageable::Pageable;
|
use library::res::pageable::Pageable;
|
||||||
use library::resp::response::{ResData, ResResult};
|
use library::res::response::{ResData, ResResult};
|
||||||
|
|
||||||
/// 获取反馈信息列表
|
/// 获取反馈信息列表
|
||||||
pub async fn get_feedback_list_by_page(page: i64, page_size: i64) -> ResResult<ResData<Pageable<Feedback>>> {
|
pub async fn get_feedback_list_by_page(page: i64, page_size: i64) -> ResResult<ResData<Pageable<Feedback>>> {
|
||||||
@ -37,7 +37,7 @@ pub async fn add_feedback(req: FeedbackAdd) -> ResResult<ResData<()>> {
|
|||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
tracing::error!(error = ?err, "添加反馈信息失败");
|
tracing::error!(error = ?err, "添加反馈信息失败");
|
||||||
return Err(library::resp::response::ResErr::ErrSystem(None));
|
return Err(library::res::response::ResErr::ErrSystem(None));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ use domain::{
|
|||||||
entities::account::{Account, Role}, vo::account::LoginAccount,
|
entities::account::{Account, Role}, vo::account::LoginAccount,
|
||||||
};
|
};
|
||||||
use library::{
|
use library::{
|
||||||
cache::account_cache::{CacheAccount, LOGIN_CACHE}, db, resp::response::{ResErr, ResData, ResResult}, token::{generate_refresh_token, generate_token}
|
cache::account_cache::{CacheAccount, LOGIN_CACHE}, db, res::response::{ResErr, ResData, ResResult}, token::{generate_refresh_token, generate_token}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user