omni_orchestrator/schemas/v1/api/
permissions.rs

1use 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// #[post("/app")]
6
7// pub async fn update_permission() {
8
9// }
10#[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}