75 lines
1.6 KiB
Rust
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?)
|
|
}
|