diff options
| author | Tolmachev Igor <me@igorek.dev> | 2025-09-26 21:34:20 +0300 |
|---|---|---|
| committer | Tolmachev Igor <me@igorek.dev> | 2025-09-26 21:34:20 +0300 |
| commit | f06554c0bbd3652265de7dd71d1178e755075679 (patch) | |
| tree | fe6788ec9ed085059e91dc92ee7d36b62ffd9b67 | |
| parent | 256d287ba68a83a04ec24f6171a72a64a77f9093 (diff) | |
| download | queue_server-f06554c0bbd3652265de7dd71d1178e755075679.tar.gz queue_server-f06554c0bbd3652265de7dd71d1178e755075679.zip | |
Add get_by_id and get_by_owner
| -rw-r--r-- | src/routers/queue/manage.rs | 63 |
1 files changed, 53 insertions, 10 deletions
diff --git a/src/routers/queue/manage.rs b/src/routers/queue/manage.rs index 10f38f5..67a3abc 100644 --- a/src/routers/queue/manage.rs +++ b/src/routers/queue/manage.rs | |||
| @@ -5,12 +5,12 @@ use sea_orm::{ | |||
| 5 | IntoActiveModel, ModelTrait, QueryFilter, | 5 | IntoActiveModel, ModelTrait, QueryFilter, |
| 6 | }; | 6 | }; |
| 7 | use serde::Deserialize; | 7 | use serde::Deserialize; |
| 8 | use utoipa::ToSchema; | 8 | use utoipa::{IntoParams, ToSchema}; |
| 9 | use utoipa_axum::{router::OpenApiRouter, routes}; | 9 | use utoipa_axum::{router::OpenApiRouter, routes}; |
| 10 | 10 | ||
| 11 | use crate::{ | 11 | use crate::{ |
| 12 | ApiError, ApiResult, AppState, ClientError, GlobalResponses, SuccessResponse, | 12 | ApiError, ApiResult, AppState, ClientError, GlobalResponses, SuccessResponse, |
| 13 | extract::{ApiJson, Auth}, | 13 | extract::{ApiJson, ApiQuery, Auth}, |
| 14 | models::Queue, | 14 | models::Queue, |
| 15 | tags::QUEUE_MANAGEMENT, | 15 | tags::QUEUE_MANAGEMENT, |
| 16 | }; | 16 | }; |
| @@ -36,6 +36,18 @@ async fn get_owned_queue( | |||
| 36 | Ok(queue) | 36 | Ok(queue) |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | #[derive(Deserialize, IntoParams)] | ||
| 40 | #[into_params(parameter_in = Query)] | ||
| 41 | struct GetByIdQueueQuery { | ||
| 42 | id: i64, | ||
| 43 | } | ||
| 44 | |||
| 45 | #[derive(Deserialize, IntoParams)] | ||
| 46 | #[into_params(parameter_in = Query)] | ||
| 47 | struct GetByOwnerIdQuery { | ||
| 48 | owner_id: i64, | ||
| 49 | } | ||
| 50 | |||
| 39 | #[derive(Deserialize, ToSchema)] | 51 | #[derive(Deserialize, ToSchema)] |
| 40 | #[schema(description = "Body of the create queue request")] | 52 | #[schema(description = "Body of the create queue request")] |
| 41 | struct CreateQueueRequest { | 53 | struct CreateQueueRequest { |
| @@ -70,23 +82,53 @@ struct DeleteQueueRequest { | |||
| 70 | 82 | ||
| 71 | #[utoipa::path( | 83 | #[utoipa::path( |
| 72 | get, | 84 | get, |
| 73 | path = "/owned", | 85 | path = "/get/id", |
| 74 | tag = QUEUE_MANAGEMENT, | 86 | tag = QUEUE_MANAGEMENT, |
| 75 | summary = "Get owned", | 87 | summary = "Get by id", |
| 76 | description = "Get your queues", | 88 | description = "Get the queue by id", |
| 89 | params(GetByIdQueueQuery), | ||
| 90 | responses( | ||
| 91 | ( | ||
| 92 | status = 200, body = SuccessResponse<Option<Queue>>, | ||
| 93 | description = "Success response with the requested queue" | ||
| 94 | ), | ||
| 95 | GlobalResponses | ||
| 96 | ), | ||
| 97 | )] | ||
| 98 | async fn get_by_id( | ||
| 99 | State(state): State<AppState>, | ||
| 100 | ApiQuery(req): ApiQuery<GetByIdQueueQuery>, | ||
| 101 | ) -> ApiResult<Option<Queue>> { | ||
| 102 | Ok(SuccessResponse::ok( | ||
| 103 | queues::Entity::find_by_id(req.id) | ||
| 104 | .one(&state.db) | ||
| 105 | .await? | ||
| 106 | .map(Into::into), | ||
| 107 | )) | ||
| 108 | } | ||
| 109 | |||
| 110 | #[utoipa::path( | ||
| 111 | get, | ||
| 112 | path = "/get/owner", | ||
| 113 | tag = QUEUE_MANAGEMENT, | ||
| 114 | summary = "Get by owner", | ||
| 115 | description = "Get queues for a given owner", | ||
| 116 | params(GetByOwnerIdQuery), | ||
| 77 | responses( | 117 | responses( |
| 78 | ( | 118 | ( |
| 79 | status = 200, body = SuccessResponse<Vec<Queue>>, | 119 | status = 200, body = SuccessResponse<Vec<Queue>>, |
| 80 | description = "Success response with your queues" | 120 | description = "Success response with queues owned by the given user" |
| 81 | ), | 121 | ), |
| 82 | GlobalResponses | 122 | GlobalResponses |
| 83 | ), | 123 | ), |
| 84 | security(("auth" = [])), | ||
| 85 | )] | 124 | )] |
| 86 | async fn owned(State(state): State<AppState>, Auth(user): Auth) -> ApiResult<Vec<Queue>> { | 125 | async fn get_by_owner( |
| 126 | State(state): State<AppState>, | ||
| 127 | ApiQuery(req): ApiQuery<GetByOwnerIdQuery>, | ||
| 128 | ) -> ApiResult<Vec<Queue>> { | ||
| 87 | return Ok(SuccessResponse::ok( | 129 | return Ok(SuccessResponse::ok( |
| 88 | queues::Entity::find() | 130 | queues::Entity::find() |
| 89 | .filter(queues::Column::OwnerId.eq(user.id)) | 131 | .filter(queues::Column::OwnerId.eq(req.owner_id)) |
| 90 | .all(&state.db) | 132 | .all(&state.db) |
| 91 | .await? | 133 | .await? |
| 92 | .into_iter() | 134 | .into_iter() |
| @@ -225,7 +267,8 @@ async fn delete( | |||
| 225 | 267 | ||
| 226 | pub fn router() -> OpenApiRouter<AppState> { | 268 | pub fn router() -> OpenApiRouter<AppState> { |
| 227 | OpenApiRouter::new() | 269 | OpenApiRouter::new() |
| 228 | .routes(routes!(owned)) | 270 | .routes(routes!(get_by_id)) |
| 271 | .routes(routes!(get_by_owner)) | ||
| 229 | .routes(routes!(create)) | 272 | .routes(routes!(create)) |
| 230 | .routes(routes!(update_name)) | 273 | .routes(routes!(update_name)) |
| 231 | .routes(routes!(update_owner)) | 274 | .routes(routes!(update_owner)) |
