92 lines
2.7 KiB
Rust
92 lines
2.7 KiB
Rust
use axum::{Json, Router, routing::delete, routing::post};
|
|
use std::net::SocketAddr;
|
|
|
|
mod db;
|
|
mod model;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
tracing_subscriber::fmt::init();
|
|
|
|
let app = Router::new()
|
|
.route("/api/users", post(get_all_users_handler))
|
|
.route("/api/users/user", post(get_user_by_id_handler))
|
|
.route(
|
|
"/api/users/user/username",
|
|
post(get_user_by_username_handler),
|
|
)
|
|
.route("/api/users/add", post(add_user_handler))
|
|
.route("/api/users", delete(delete_user_handler));
|
|
|
|
let addr = SocketAddr::from(([0, 0, 0, 0], 8888));
|
|
println!("Сервер запускается на {}", addr);
|
|
|
|
axum::serve(tokio::net::TcpListener::bind(addr).await.unwrap(), app)
|
|
.await
|
|
.unwrap();
|
|
}
|
|
|
|
async fn get_all_users_handler() -> Json<Vec<model::GetUserResponse>> {
|
|
let users = db::get_all_users();
|
|
let mapped_users = users
|
|
.into_iter()
|
|
.map(|user| model::GetUserResponse {
|
|
id: user.id,
|
|
username: user.username,
|
|
email: user.email,
|
|
group: user.group,
|
|
is_superuser: user.is_superuser,
|
|
})
|
|
.collect();
|
|
Json(mapped_users)
|
|
}
|
|
|
|
async fn get_user_by_id_handler(
|
|
Json(payload): Json<model::GetUserByIdRequest>,
|
|
) -> Json<Option<model::GetUserResponse>> {
|
|
let user = db::get_user_by_id(payload.id);
|
|
let mapped_user = user.map(|user| model::GetUserResponse {
|
|
id: user.id,
|
|
username: user.username,
|
|
email: user.email,
|
|
group: user.group,
|
|
is_superuser: user.is_superuser,
|
|
});
|
|
Json(mapped_user)
|
|
}
|
|
|
|
async fn get_user_by_username_handler(
|
|
Json(payload): Json<model::GetUserByUsernameRequest>,
|
|
) -> Json<Option<model::GetUserResponse>> {
|
|
let user = db::get_user_by_username(&payload.username);
|
|
let mapped_user = user.map(|user| model::GetUserResponse {
|
|
id: user.id,
|
|
username: user.username,
|
|
email: user.email,
|
|
group: user.group,
|
|
is_superuser: user.is_superuser,
|
|
});
|
|
Json(mapped_user)
|
|
}
|
|
|
|
async fn add_user_handler(
|
|
Json(payload): Json<model::AddUserRequest>,
|
|
) -> Json<model::GetUserResponse> {
|
|
let user = model::User {
|
|
id: payload.id.clone(),
|
|
username: payload.username.clone(),
|
|
email: payload.email.clone(),
|
|
password: payload.password.clone(),
|
|
group: payload.group.clone(),
|
|
is_superuser: payload.is_superuser,
|
|
};
|
|
Json(db::insert_user(user))
|
|
}
|
|
|
|
async fn delete_user_handler(
|
|
Json(payload): Json<model::DeleteUserRequest>,
|
|
) -> Json<model::DeleteUserResponse> {
|
|
let deleted: bool = db::delete_user(payload.id);
|
|
Json(model::DeleteUserResponse { success: deleted })
|
|
}
|