diff options
| author | Tolmachev Igor <me@igorek.dev> | 2025-09-25 01:21:50 +0300 |
|---|---|---|
| committer | Tolmachev Igor <me@igorek.dev> | 2025-09-25 01:21:50 +0300 |
| commit | 67e5ecee5107179d7aa885a737ce521aef755a6b (patch) | |
| tree | 3df8cb437a9d916a9c0b062ebc51e44b68ff2c8b /src/routers | |
| parent | 15c744e995805a30700cb04c488cddbb3015316b (diff) | |
| download | queue_server-67e5ecee5107179d7aa885a737ce521aef755a6b.tar.gz queue_server-67e5ecee5107179d7aa885a737ce521aef755a6b.zip | |
Improve the errors
Diffstat (limited to 'src/routers')
| -rw-r--r-- | src/routers/account.rs | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/routers/account.rs b/src/routers/account.rs index a6fce99..71ba496 100644 --- a/src/routers/account.rs +++ b/src/routers/account.rs | |||
| @@ -2,22 +2,30 @@ use axum::extract::State; | |||
| 2 | use chrono::{DateTime, Duration, Utc}; | 2 | use chrono::{DateTime, Duration, Utc}; |
| 3 | use entity::users::{self}; | 3 | use entity::users::{self}; |
| 4 | use sea_orm::{ | 4 | use sea_orm::{ |
| 5 | ActiveModelTrait, ActiveValue::Set, ColumnTrait, EntityTrait, IntoActiveModel, ModelTrait, | 5 | ActiveModelTrait, ActiveValue::Set, ColumnTrait, DatabaseConnection, EntityTrait, |
| 6 | QueryFilter, | 6 | IntoActiveModel, ModelTrait, QueryFilter, |
| 7 | }; | 7 | }; |
| 8 | use serde::{Deserialize, Serialize}; | 8 | use serde::{Deserialize, Serialize}; |
| 9 | use utoipa::ToSchema; | 9 | use utoipa::ToSchema; |
| 10 | use utoipa_axum::{router::OpenApiRouter, routes}; | 10 | use utoipa_axum::{router::OpenApiRouter, routes}; |
| 11 | 11 | ||
| 12 | use crate::{ | 12 | use crate::{ |
| 13 | ApiResult, AppState, ClientError, GlobalResponses, JwtClaims, ServerError, SuccessResponse, | 13 | ApiError, ApiResult, AppState, ClientError, GlobalResponses, JwtClaims, ServerError, |
| 14 | create_jwt, create_password, | 14 | SuccessResponse, create_jwt, create_password, |
| 15 | extract::{ApiJson, Auth}, | 15 | extract::{ApiJson, Auth}, |
| 16 | models::Account, | 16 | models::Account, |
| 17 | tags::ACCOUNT, | 17 | tags::ACCOUNT, |
| 18 | validate_password, | 18 | validate_password, |
| 19 | }; | 19 | }; |
| 20 | 20 | ||
| 21 | async fn username_exists(username: &str, db: &DatabaseConnection) -> Result<bool, ApiError> { | ||
| 22 | Ok(users::Entity::find() | ||
| 23 | .filter(users::Column::Username.eq(username)) | ||
| 24 | .one(db) | ||
| 25 | .await? | ||
| 26 | .is_some()) | ||
| 27 | } | ||
| 28 | |||
| 21 | #[derive(Serialize, ToSchema)] | 29 | #[derive(Serialize, ToSchema)] |
| 22 | #[schema(description = "Authorization token information")] | 30 | #[schema(description = "Authorization token information")] |
| 23 | struct Token { | 31 | struct Token { |
| @@ -130,14 +138,8 @@ async fn register( | |||
| 130 | State(state): State<AppState>, | 138 | State(state): State<AppState>, |
| 131 | ApiJson(req): ApiJson<RegisterRequest>, | 139 | ApiJson(req): ApiJson<RegisterRequest>, |
| 132 | ) -> ApiResult<Account> { | 140 | ) -> ApiResult<Account> { |
| 133 | let user_exists = users::Entity::find() | 141 | if username_exists(&req.username, &state.db).await? { |
| 134 | .filter(users::Column::Username.eq(&req.username)) | 142 | return Err(ClientError::UsernameIsTaken { |
| 135 | .one(&state.db) | ||
| 136 | .await? | ||
| 137 | .is_some(); | ||
| 138 | |||
| 139 | if user_exists { | ||
| 140 | return Err(ClientError::UserAlreadyExists { | ||
| 141 | username: req.username, | 143 | username: req.username, |
| 142 | } | 144 | } |
| 143 | .into()); | 145 | .into()); |
| @@ -255,14 +257,8 @@ async fn change_username( | |||
| 255 | Auth(user): Auth, | 257 | Auth(user): Auth, |
| 256 | ApiJson(req): ApiJson<ChangeUsernameRequest>, | 258 | ApiJson(req): ApiJson<ChangeUsernameRequest>, |
| 257 | ) -> ApiResult<Account> { | 259 | ) -> ApiResult<Account> { |
| 258 | let user_exists = users::Entity::find() | 260 | if username_exists(&req.new_username, &state.db).await? { |
| 259 | .filter(users::Column::Username.eq(&req.new_username)) | 261 | return Err(ClientError::UsernameIsTaken { |
| 260 | .one(&state.db) | ||
| 261 | .await? | ||
| 262 | .is_some(); | ||
| 263 | |||
| 264 | if user_exists { | ||
| 265 | return Err(ClientError::UserAlreadyExists { | ||
| 266 | username: req.new_username, | 262 | username: req.new_username, |
| 267 | } | 263 | } |
| 268 | .into()); | 264 | .into()); |
