This repository has been archived on 2023-07-04. You can view files and clone it, but cannot push or open issues/pull-requests.
blog/src/v1/versions.rs

75 lines
1.6 KiB
Rust

use rb::{
errors::{RbOption, RbResult},
guards::Admin,
};
use rb_blog::db;
use rocket::serde::json::Json;
use uuid::Uuid;
use crate::RbDbConn;
#[get("/?<offset>&<limit>", rank = 1)]
pub async fn get(conn: RbDbConn, offset: u32, limit: u32) -> RbResult<Json<Vec<db::Version>>>
{
Ok(Json(
conn.run(move |c| db::versions::get(c, offset, limit))
.await?,
))
}
#[get("/?<post_id>&<offset>&<limit>", rank = 0)]
pub async fn get_for_post(
conn: RbDbConn,
post_id: Uuid,
offset: u32,
limit: u32,
) -> RbResult<Json<Vec<db::Version>>>
{
Ok(Json(
conn.run(move |c| db::versions::get_for_post(c, &post_id, offset, limit))
.await?,
))
}
#[post("/", data = "<new>")]
pub async fn create(
_admin: Admin,
conn: RbDbConn,
new: Json<db::NewVersion>,
) -> RbResult<Json<db::Version>>
{
Ok(Json(
conn.run(move |c| db::versions::create(c, &new.into_inner()))
.await?,
))
}
#[get("/<id>")]
pub async fn find(conn: RbDbConn, id: uuid::Uuid) -> RbOption<Json<db::Version>>
{
Ok(conn
.run(move |c| db::versions::find(c, &id))
.await?
.and_then(|p| Some(Json(p))))
}
#[patch("/<id>", data = "<patch>")]
pub async fn patch(
_admin: Admin,
conn: RbDbConn,
id: uuid::Uuid,
patch: Json<db::PatchVersion>,
) -> RbResult<Json<db::Version>>
{
Ok(Json(
conn.run(move |c| db::versions::update(c, &id, &patch.into_inner()))
.await?,
))
}
#[delete("/<id>")]
pub async fn delete(_admin: Admin, conn: RbDbConn, id: uuid::Uuid) -> RbResult<()>
{
Ok(conn.run(move |c| db::versions::delete(c, &id)).await?)
}