From 833cac68c1bbf7dd6680d07406495d57a2706acc Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Wed, 24 Sep 2025 11:59:48 +0300 Subject: Move Account model into a separate module --- src/main.rs | 1 + src/models.rs | 27 +++++++++++++++++++++++++++ src/routers/account.rs | 49 ++++++------------------------------------------- 3 files changed, 34 insertions(+), 43 deletions(-) create mode 100644 src/models.rs diff --git a/src/main.rs b/src/main.rs index fe2589a..560225e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ mod api; mod auth; mod error; mod extract; +pub mod models; mod response; mod routers; mod state; diff --git a/src/models.rs b/src/models.rs new file mode 100644 index 0000000..b7631a4 --- /dev/null +++ b/src/models.rs @@ -0,0 +1,27 @@ +use entity::users; +use serde::Serialize; +use utoipa::ToSchema; + +#[derive(Serialize, ToSchema)] +#[schema(description = "Account information")] +pub struct Account { + #[schema(examples(1))] + pub id: i64, + #[schema(examples("john_doe", "ivanov_ivan"))] + pub username: String, + #[schema(examples("John", "Иван"))] + pub first_name: String, + #[schema(examples("Doe", "Иванов"))] + pub last_name: String, +} + +impl From for Account { + fn from(value: users::Model) -> Self { + Self { + id: value.id, + username: value.username, + first_name: value.first_name, + last_name: value.last_name, + } + } +} diff --git a/src/routers/account.rs b/src/routers/account.rs index 4aaa56a..bb1cde5 100644 --- a/src/routers/account.rs +++ b/src/routers/account.rs @@ -13,23 +13,11 @@ use crate::{ ApiResult, AppState, ClientError, GlobalResponses, JwtClaims, ServerError, SuccessResponse, create_jwt, create_password, extract::{ApiJson, Auth}, + models::Account, tags::ACCOUNT, validate_password, }; -#[derive(Serialize, ToSchema)] -#[schema(description = "Account information")] -struct Account { - #[schema(examples(1))] - id: i64, - #[schema(examples("john_doe", "ivanov_ivan"))] - username: String, - #[schema(examples("John", "Иван"))] - first_name: String, - #[schema(examples("Doe", "Иванов"))] - last_name: String, -} - #[derive(Serialize, ToSchema)] #[schema(description = "Authorization token information")] struct Token { @@ -120,12 +108,7 @@ struct DeleteUserRequest { security(("auth" = [])), )] async fn me(Auth(user): Auth) -> ApiResult { - return Ok(SuccessResponse::ok(Account { - id: user.id, - username: user.username, - first_name: user.first_name, - last_name: user.last_name, - })); + return Ok(SuccessResponse::ok(user.into())); } #[utoipa::path( @@ -170,12 +153,7 @@ async fn register( .insert(&state.db) .await?; - Ok(SuccessResponse::ok(Account { - id: user.id, - username: user.username, - first_name: user.first_name, - last_name: user.last_name, - })) + Ok(SuccessResponse::ok(user.into())) } #[utoipa::path( @@ -250,12 +228,7 @@ async fn change_password( active_user.password_issue_date = Set(Utc::now().naive_utc()); let user = active_user.update(&state.db).await?; - Ok(SuccessResponse::ok(Account { - id: user.id, - username: user.username, - first_name: user.first_name, - last_name: user.last_name, - })) + Ok(SuccessResponse::ok(user.into())) } #[utoipa::path( @@ -295,12 +268,7 @@ async fn change_username( active_user.username = Set(req.new_username); let user = active_user.update(&state.db).await?; - Ok(SuccessResponse::ok(Account { - id: user.id, - username: user.username, - first_name: user.first_name, - last_name: user.last_name, - })) + Ok(SuccessResponse::ok(user.into())) } #[utoipa::path( @@ -368,12 +336,7 @@ async fn delete( user.clone().delete(&state.db).await?; - Ok(SuccessResponse::ok(Account { - id: user.id, - username: user.username, - first_name: user.first_name, - last_name: user.last_name, - })) + Ok(SuccessResponse::ok(user.into())) } pub fn router() -> OpenApiRouter { -- cgit v1.2.3