aboutsummaryrefslogtreecommitdiff
path: root/src/routers/queue/manage.rs
diff options
context:
space:
mode:
authorTolmachev Igor <me@igorek.dev>2025-09-26 21:34:20 +0300
committerTolmachev Igor <me@igorek.dev>2025-09-26 21:34:20 +0300
commitf06554c0bbd3652265de7dd71d1178e755075679 (patch)
treefe6788ec9ed085059e91dc92ee7d36b62ffd9b67 /src/routers/queue/manage.rs
parent256d287ba68a83a04ec24f6171a72a64a77f9093 (diff)
downloadqueue_server-f06554c0bbd3652265de7dd71d1178e755075679.tar.gz
queue_server-f06554c0bbd3652265de7dd71d1178e755075679.zip
Add get_by_id and get_by_owner
Diffstat (limited to 'src/routers/queue/manage.rs')
-rw-r--r--src/routers/queue/manage.rs63
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};
7use serde::Deserialize; 7use serde::Deserialize;
8use utoipa::ToSchema; 8use utoipa::{IntoParams, ToSchema};
9use utoipa_axum::{router::OpenApiRouter, routes}; 9use utoipa_axum::{router::OpenApiRouter, routes};
10 10
11use crate::{ 11use 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)]
41struct GetByIdQueueQuery {
42 id: i64,
43}
44
45#[derive(Deserialize, IntoParams)]
46#[into_params(parameter_in = Query)]
47struct 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")]
41struct CreateQueueRequest { 53struct 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)]
98async 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)]
86async fn owned(State(state): State<AppState>, Auth(user): Auth) -> ApiResult<Vec<Queue>> { 125async 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
226pub fn router() -> OpenApiRouter<AppState> { 268pub 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))