crab_rocket_user 0.1.0

User package for the crab rocket project
Documentation
use rocket::{delete, get, http::Status, options, patch, post, serde::json::Json};
use serde_json::json;

use crate::{
    controllers::user_controller,
    models::user::{NewUser, PatchUser},
};

#[utoipa::path(
    responses(
        (status = 200, description = "found successfully", body = Vec<User>),
        (status = NOT_FOUND, description = "not found") 
    )
)]
#[get("/user")]
pub fn get_all_users() -> Json<serde_json::Value> {
    let (code, message, all_users) = user_controller::get_all_users_controller();
    let response = serde_json::from_value(json!({
        "code":code,
        "message":message,
        "data":all_users
    }))
    .unwrap();
    Json(response)
}

#[utoipa::path(
    responses(
        (status = 200, description = "found successfully", body = User),
        (status = NOT_FOUND, description = "not found") 
    )
)]
#[get("/user/<id>")]
pub fn get_user_by_id(id: i32) -> Json<serde_json::Value> {
    let (code, message, user) = user_controller::get_user_by_id_controller(id);
    let response = serde_json::from_value(json!({
        "code":code,
        "message":message,
        "data":user
    }))
    .unwrap();
    Json(response)
}

#[utoipa::path(
    responses(
        (status = 200, description = "created successfully", body = User),
        (status = NOT_FOUND, description = "not found") 
    )
)]
#[post("/user", data = "<user>")]
pub fn insert_single_user(user: Json<NewUser>) -> Json<serde_json::Value> {
    let (code, message, inserted_user) = user_controller::insert_single_user_controller(&user);
    let response = serde_json::from_value(json!({
        "code":code,
        "message":message,
        "data":inserted_user
    }))
    .unwrap();
    Json(response)
}

#[utoipa::path(
    responses(
        (status = 200, description = "updated successfully", body = User),
        (status = NOT_FOUND, description = "not found") 
    )
)]
#[patch("/user/<id>", data = "<user>")]
pub fn update_user_by_id(id: i32, user: Json<PatchUser>) -> Json<serde_json::Value> {
    let (code, message, updated_user) = user_controller::update_user_by_id_controller(id, &user);
    let response = serde_json::from_value(json!({
        "code":code,
        "message":message,
        "data":updated_user
    }))
    .unwrap();
    Json(response)
}

#[utoipa::path(
    responses(
        (status = 200, description = "delete successfully", body = User),
        (status = NOT_FOUND, description = "not found") 
    )
)]
#[delete("/user/<id>")]
pub fn delete_user_by_id(id: i32) -> Json<serde_json::Value> {
    let (code, message, updated_user) = user_controller::delete_user_by_id_controller(id);
    let response = serde_json::from_value(json!({
        "code":code,
        "message":message,
        "data":updated_user
    }))
    .unwrap();
    Json(response)
}
#[options("/user")]
pub fn options_user_filter() -> Status {
    Status::Ok
}