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);
|
||||
|
||||
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_username)
|
||||
.service(routes::users::me);
|
||||
|
||||
@@ -163,6 +163,7 @@ pub mod user {
|
||||
#[schema(examples(
|
||||
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjY3ZGNjOWE5NTA3YjAwMDA3NzI3NDRhMiIsImlhdCI6IjE3NDMxMDgwOTkiLCJleHAiOiIxODY5MjUyMDk5In0.rMgXRb3JbT9AvLK4eiY9HMB5LxgUudkpQyoWKOypZFY"
|
||||
))]
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
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_username;
|
||||
mod me;
|
||||
|
||||
Reference in New Issue
Block a user