use axum::{ extract::{Path, Query}, response::IntoResponse, Extension, Json, }; use crate::{ v1::{ permissions_dto::{PermissionsItemDto, PermissionsRequestDto}, permissions_service::PermissionsService, }, AppState, MessageResponseDto, MetaRequestDto, ResponseListSuccessDto, ResponseSuccessDto, }; #[utoipa::path( get, path = "/v1/permissions", params( ("page" = Option, Query, description = "Page number"), ("per_page" = Option, Query, description = "Items per page"), ("search" = Option, Query, description = "Search keyword"), ("sort_by" = Option, Query, description = "Sort by field"), ("order" = Option, Query, description = "Order ASC or DESC"), ("filter" = Option, Query, description = "Filter value"), ("filter_by" = Option, Query, description = "Field to filter by"), ), responses( (status = 200, description = "Get permission list", body = ResponseListSuccessDto>) ), tag = "Permissions" )] pub async fn get_permission_list( Extension(state): Extension, Query(meta): Query, ) -> impl IntoResponse { PermissionsService::get_permission_list(&state, meta).await } #[utoipa::path( get, path = "/v1/permissions/detail/{id}", security( ("Bearer" = []) ), params(("id" = String, Path, description = "Permission ID")), responses( (status = 200, description = "Get permission by ID", body = ResponseSuccessDto) ), tag = "Permissions" )] pub async fn get_permission_by_id( Extension(state): Extension, Path(id): Path, ) -> impl IntoResponse { PermissionsService::get_permission_by_id(&state, id).await } #[utoipa::path( post, security( ("Bearer" = []) ), path = "/v1/permissions/create", request_body = PermissionsRequestDto, responses( (status = 201, description = "Create new permission", body = MessageResponseDto) ), tag = "Permissions" )] pub async fn post_create_permission( Extension(state): Extension, Json(payload): Json, ) -> impl IntoResponse { PermissionsService::create_role(&state, payload).await } #[utoipa::path( put, security( ("Bearer" = []) ), path = "/v1/permissions/update/{id}", request_body = PermissionsRequestDto, responses( (status = 200, description = "Update permission", body = MessageResponseDto) ), tag = "Permissions" )] pub async fn put_update_permission( Extension(state): Extension, Path(id): Path, Json(payload): Json, ) -> impl IntoResponse { PermissionsService::update_permission(&state, payload, id).await } #[utoipa::path( delete, security( ("Bearer" = []) ), path = "/v1/permissions/delete/{id}", responses( (status = 200, description = "Delete permission", body = MessageResponseDto) ), tag = "Permissions" )] pub async fn delete_permission( Extension(state): Extension, Path(id): Path, ) -> impl IntoResponse { PermissionsService::delete_permission(&state, id).await }