omni_orchestrator/schemas/v1/api/
permissions.rs1use crate::schemas::v1::db::queries::{self as db};
2use crate::models::permission::Permission;
3use rocket::{delete, get, post, serde::json::Json, State};
4use sqlx::MySql;
5#[get("/permissions/<id>")]
11pub async fn get_permission_by_id(
12 pool: &State<sqlx::Pool<MySql>>,
13 id: i64,
14) -> Json<Permission> {
15 let permission = db::permission::get_permission_by_id(pool, id)
16 .await
17 .unwrap();
18
19 Json(permission)
20}
21
22#[get("/permissions")]
23pub async fn list_permission(pool: &State<sqlx::Pool<MySql>>) -> Json<Vec<Permission>> {
24 let permissions = db::permission::list_permissions(pool).await.unwrap();
25
26 Json(permissions)
27}
28#[post("/permissions", format = "json", data = "<permission>")]
29pub async fn create_permission(
30 pool: &State<sqlx::Pool<MySql>>,
31 permission: Json<Permission>,
32) -> Json<Permission> {
33 let permission = db::permission::create_permission(
34 pool,
35 &permission.name,
36 permission.description.clone(),
37 permission.resource_type.clone().unwrap(),
38 )
39 .await
40 .unwrap();
41 Json(permission)
42}
43
44#[delete("/permissions/<id>")]
45pub async fn delete_permission(
46 pool: &State<sqlx::Pool<MySql>>,
47 id: i64,
48) -> (rocket::http::Status, String) {
49 let result = db::permission::delete_permission(pool, id);
50 match result.await {
51 Ok(_) => (
52 rocket::http::Status::Ok,
53 "Permission has been successfully deleted".to_string(),
54 ),
55 Err(e) => (rocket::http::Status::InternalServerError, format!("{e:#}")),
56 }
57}