mirror of
https://github.com/n08i40k/schedule-parser-rusted.git
synced 2025-12-06 09:47:50 +03:00
feat(users): add endpoints for getting user by ids
This commit is contained in:
17
src/main.rs
17
src/main.rs
@@ -50,7 +50,22 @@ pub fn get_api_scope<
|
|||||||
.service(routes::auth::sign_up_vk);
|
.service(routes::auth::sign_up_vk);
|
||||||
|
|
||||||
let users_scope = utoipa_actix_web::scope("/users")
|
let users_scope = utoipa_actix_web::scope("/users")
|
||||||
.wrap(JWTAuthorizationBuilder::new().build())
|
.wrap(
|
||||||
|
JWTAuthorizationBuilder::new()
|
||||||
|
.add_paths(
|
||||||
|
["/by/id/{id}", "/by/telegram-id/{id}"],
|
||||||
|
Some(ServiceConfig {
|
||||||
|
allow_service: true,
|
||||||
|
user_roles: Some(&[UserRole::Admin]),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.build(),
|
||||||
|
)
|
||||||
|
.service(
|
||||||
|
utoipa_actix_web::scope("/by")
|
||||||
|
.service(routes::users::by::by_id)
|
||||||
|
.service(routes::users::by::by_telegram_id),
|
||||||
|
)
|
||||||
.service(routes::users::change_group)
|
.service(routes::users::change_group)
|
||||||
.service(routes::users::change_username)
|
.service(routes::users::change_username)
|
||||||
.service(routes::users::me);
|
.service(routes::users::me);
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ pub mod user {
|
|||||||
#[schema(examples(
|
#[schema(examples(
|
||||||
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjY3ZGNjOWE5NTA3YjAwMDA3NzI3NDRhMiIsImlhdCI6IjE3NDMxMDgwOTkiLCJleHAiOiIxODY5MjUyMDk5In0.rMgXRb3JbT9AvLK4eiY9HMB5LxgUudkpQyoWKOypZFY"
|
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjY3ZGNjOWE5NTA3YjAwMDA3NzI3NDRhMiIsImlhdCI6IjE3NDMxMDgwOTkiLCJleHAiOiIxODY5MjUyMDk5In0.rMgXRb3JbT9AvLK4eiY9HMB5LxgUudkpQyoWKOypZFY"
|
||||||
))]
|
))]
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub access_token: Option<String>,
|
pub access_token: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
56
src/routes/users/by.rs
Normal file
56
src/routes/users/by.rs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
use crate::routes::schema::user::UserResponse;
|
||||||
|
use crate::routes::users::by::schema::{ErrorCode, ServiceResponse};
|
||||||
|
use crate::state::AppState;
|
||||||
|
use actix_web::{get, web};
|
||||||
|
use database::query::Query;
|
||||||
|
|
||||||
|
#[utoipa::path(responses((status = OK, body = UserResponse)))]
|
||||||
|
#[get("/id/{id}")]
|
||||||
|
pub async fn by_id(app_state: web::Data<AppState>, path: web::Path<String>) -> ServiceResponse {
|
||||||
|
let user_id = path.into_inner();
|
||||||
|
|
||||||
|
let db = app_state.get_database();
|
||||||
|
|
||||||
|
match Query::find_user_by_id(db, &user_id).await {
|
||||||
|
Ok(Some(user)) => Ok(UserResponse::from(user)),
|
||||||
|
_ => Err(ErrorCode::NotFound),
|
||||||
|
}
|
||||||
|
.into()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[utoipa::path(responses((status = OK, body = UserResponse)))]
|
||||||
|
#[get("/telegram-id/{id}")]
|
||||||
|
pub async fn by_telegram_id(
|
||||||
|
app_state: web::Data<AppState>,
|
||||||
|
path: web::Path<i64>,
|
||||||
|
) -> ServiceResponse {
|
||||||
|
let telegram_id = path.into_inner();
|
||||||
|
|
||||||
|
let db = app_state.get_database();
|
||||||
|
|
||||||
|
match Query::find_user_by_telegram_id(db, telegram_id).await {
|
||||||
|
Ok(Some(user)) => Ok(UserResponse::from(user)),
|
||||||
|
_ => Err(ErrorCode::NotFound),
|
||||||
|
}
|
||||||
|
.into()
|
||||||
|
}
|
||||||
|
|
||||||
|
mod schema {
|
||||||
|
use crate::routes::schema::user::UserResponse;
|
||||||
|
use actix_macros::ErrResponse;
|
||||||
|
use derive_more::Display;
|
||||||
|
use serde::Serialize;
|
||||||
|
use utoipa::ToSchema;
|
||||||
|
|
||||||
|
pub type ServiceResponse = crate::routes::schema::Response<UserResponse, ErrorCode>;
|
||||||
|
|
||||||
|
#[derive(Clone, Serialize, Display, ToSchema, ErrResponse)]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
#[schema(as = Users::By::ErrorCode)]
|
||||||
|
pub enum ErrorCode {
|
||||||
|
/// User not found.
|
||||||
|
#[status_code = "actix_web::http::StatusCode::NOT_FOUND"]
|
||||||
|
#[display("Required user not found.")]
|
||||||
|
NotFound,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
pub mod by;
|
||||||
mod change_group;
|
mod change_group;
|
||||||
mod change_username;
|
mod change_username;
|
||||||
mod me;
|
mod me;
|
||||||
|
|||||||
Reference in New Issue
Block a user