Files
imphnen-backend-service/src/apps/v1/permissions/permissions_service.rs
T

113 lines
3.2 KiB
Rust

use crate::{
common_response, make_thing, success_list_response, success_response,
validate_request, AppState, MetaRequestDto, PermissionsRepository,
PermissionsSchema, ResourceEnum, ResponseListSuccessDto, ResponseSuccessDto,
};
use axum::http::StatusCode;
use axum::response::Response;
use super::PermissionsRequestDto;
pub struct PermissionsService;
impl PermissionsService {
pub async fn get_permission_list(
state: &AppState,
meta: MetaRequestDto,
) -> Response {
let repo = PermissionsRepository::new(state);
match repo.query_permission_list(meta).await {
Ok(data) => {
let response = ResponseListSuccessDto {
data: data.data,
meta: data.meta,
};
success_list_response(response)
}
Err(e) => common_response(StatusCode::BAD_REQUEST, &e.to_string()),
}
}
pub async fn get_permission_by_id(state: &AppState, id: String) -> Response {
let repo = PermissionsRepository::new(state);
match repo.query_permission_by_id(id).await {
Ok(permission) => success_response(ResponseSuccessDto { data: permission }),
Err(e) => common_response(StatusCode::NOT_FOUND, &e.to_string()),
}
}
pub async fn create_role(
state: &AppState,
payload: PermissionsRequestDto,
) -> Response {
if let Err((status, message)) = validate_request(&payload) {
return common_response(status, &message);
}
let repo = PermissionsRepository::new(state);
match repo.query_permission_by_name(payload.name.clone()).await {
Ok(_role) => {
return common_response(
StatusCode::CONFLICT,
"Permission name already exists",
);
}
Err(err) if err.to_string().contains("not found") => {}
Err(e) => {
return common_response(StatusCode::INTERNAL_SERVER_ERROR, &e.to_string());
}
}
match repo
.query_create_permission(PermissionsSchema {
name: payload.name,
..Default::default()
})
.await
{
Ok(msg) => common_response(StatusCode::CREATED, &msg),
Err(e) => common_response(StatusCode::INTERNAL_SERVER_ERROR, &e.to_string()),
}
}
pub async fn update_permission(
state: &AppState,
payload: PermissionsRequestDto,
id: String,
) -> Response {
if let Err((status, message)) = validate_request(&payload) {
return common_response(status, &message);
}
let repo = PermissionsRepository::new(state);
match repo
.query_update_permission(PermissionsSchema {
id: make_thing(&ResourceEnum::Permissions.to_string(), &id),
name: payload.name,
..Default::default()
})
.await
{
Ok(msg) => common_response(StatusCode::OK, &msg),
Err(e) => {
if e.to_string().contains("not found") {
common_response(StatusCode::NOT_FOUND, "Permission not found")
} else {
common_response(StatusCode::BAD_REQUEST, &e.to_string())
}
}
}
}
pub async fn delete_permission(state: &AppState, id: String) -> Response {
let repo = PermissionsRepository::new(state);
match repo.query_delete_permission(id).await {
Ok(msg) => common_response(StatusCode::OK, &msg),
Err(e) => {
if e.to_string().contains("not found") {
common_response(StatusCode::NOT_FOUND, "Permission not found")
} else {
common_response(StatusCode::BAD_REQUEST, &e.to_string())
}
}
}
}
}