Some routes for managing posts
parent
449c20fac2
commit
d013bd60bd
6
API.md
6
API.md
|
@ -16,9 +16,9 @@ This file describes the API that the software adheres to. All routes are defined
|
|||
* GET `/posts?<offset>&<limit>` - get list of posts from the default feed given offset & limit
|
||||
* GET `/posts?<section_id_or_shortname>&<offset>&<limit>` - get list of posts of a specific section
|
||||
* (A) POST `/posts` - create a new post
|
||||
* GET `/posts/<id_or_shortname>` - get a specific post
|
||||
* (A) DELETE `/posts/<id_or_shortname>` - delete a post
|
||||
* (A) PATCH `/posts/<id_or_shortname>` - patch a post
|
||||
* GET `/posts/<id>` - get a specific post
|
||||
* (A) DELETE `/posts/<id>` - delete a post
|
||||
* (A) PATCH `/posts/<id>` - patch a post
|
||||
|
||||
## Sections
|
||||
|
||||
|
|
|
@ -1109,6 +1109,7 @@ dependencies = [
|
|||
"tokio-stream",
|
||||
"tokio-util",
|
||||
"ubyte",
|
||||
"uuid",
|
||||
"version_check",
|
||||
"yansi",
|
||||
]
|
||||
|
@ -1155,6 +1156,7 @@ dependencies = [
|
|||
"time 0.2.27",
|
||||
"tokio",
|
||||
"uncased",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
@ -17,7 +17,7 @@ static = ["web", "docs"]
|
|||
|
||||
[dependencies]
|
||||
# Backend web framework
|
||||
rocket = { version = "0.5.0-rc.1", features = [ "json" ] }
|
||||
rocket = { version = "0.5.0-rc.1", features = [ "json", "uuid" ] }
|
||||
# Used to provide Rocket routes with database connections
|
||||
rocket_sync_db_pools = { version = "0.1.0-rc.1", default_features = false, features = [ "diesel_postgres_pool" ] }
|
||||
# Used to (de)serialize JSON
|
||||
|
|
|
@ -44,7 +44,7 @@ pub fn get(conn: &PgConnection, offset_: u32, limit_: u32) -> RbResult<Vec<Post>
|
|||
Ok(posts
|
||||
.offset(offset_.into())
|
||||
.limit(limit_.into())
|
||||
.load::<Post>(conn)
|
||||
.load(conn)
|
||||
.map_err(|_| RbError::DbError("Couldn't query posts."))?)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
//! Handles refresh token-related database operations.
|
||||
|
||||
use diesel::{insert_into, prelude::*, Insertable, PgConnection, Queryable};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use uuid::Uuid;
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
use crate::{
|
||||
errors::{RbError, RbResult},
|
||||
|
@ -56,7 +56,11 @@ pub fn create(conn: &PgConnection, new_token: &NewRefreshToken) -> RbResult<Refr
|
|||
// TODO check for conflict?
|
||||
}
|
||||
|
||||
pub fn update(conn: &PgConnection, token_: &[u8], patch_token: &PatchRefreshToken) -> RbResult<RefreshToken>
|
||||
pub fn update(
|
||||
conn: &PgConnection,
|
||||
token_: &[u8],
|
||||
patch_token: &PatchRefreshToken,
|
||||
) -> RbResult<RefreshToken>
|
||||
{
|
||||
Ok(diesel::update(refresh_tokens.filter(token.eq(token_)))
|
||||
.set(patch_token)
|
||||
|
|
|
@ -112,4 +112,5 @@ fn rocket() -> _
|
|||
routes![admin::create_user, admin::get_user_info],
|
||||
)
|
||||
.mount("/api/sections", routes![sections::create_section])
|
||||
.mount("/api/posts", routes![posts::get, posts::create])
|
||||
}
|
||||
|
|
34
src/posts.rs
34
src/posts.rs
|
@ -1,11 +1,6 @@
|
|||
use rocket::serde::json::Json;
|
||||
|
||||
use crate::{
|
||||
db,
|
||||
errors::RbResult,
|
||||
guards::Admin,
|
||||
RbDbConn,
|
||||
};
|
||||
use crate::{db, errors::RbResult, guards::Admin, RbDbConn};
|
||||
|
||||
#[get("/?<offset>&<limit>")]
|
||||
pub async fn get(conn: RbDbConn, offset: u32, limit: u32) -> RbResult<Json<Vec<db::Post>>>
|
||||
|
@ -16,11 +11,34 @@ pub async fn get(conn: RbDbConn, offset: u32, limit: u32) -> RbResult<Json<Vec<d
|
|||
}
|
||||
|
||||
#[post("/", data = "<new_post>")]
|
||||
pub async fn create(_admin: Admin, conn: RbDbConn, new_post: Json<db::NewPost>)
|
||||
-> RbResult<Json<db::Post>>
|
||||
pub async fn create(
|
||||
_admin: Admin,
|
||||
conn: RbDbConn,
|
||||
new_post: Json<db::NewPost>,
|
||||
) -> RbResult<Json<db::Post>>
|
||||
{
|
||||
Ok(Json(
|
||||
conn.run(move |c| db::posts::create(c, &new_post.into_inner()))
|
||||
.await?,
|
||||
))
|
||||
}
|
||||
|
||||
#[patch("/<id>", data = "<patch_post>")]
|
||||
pub async fn patch(
|
||||
_admin: Admin,
|
||||
conn: RbDbConn,
|
||||
id: uuid::Uuid,
|
||||
patch_post: Json<db::PatchPost>,
|
||||
) -> RbResult<Json<db::Post>>
|
||||
{
|
||||
Ok(Json(
|
||||
conn.run(move |c| db::posts::update(c, &id, &patch_post.into_inner()))
|
||||
.await?,
|
||||
))
|
||||
}
|
||||
|
||||
#[delete("/<id>")]
|
||||
pub async fn delete(_admin: Admin, conn: RbDbConn, id: uuid::Uuid) -> RbResult<()>
|
||||
{
|
||||
Ok(conn.run(move |c| db::posts::delete(c, &id)).await?)
|
||||
}
|
||||
|
|
|
@ -18,7 +18,8 @@ pub async fn create_section(
|
|||
new_section: Json<db::NewSection>,
|
||||
) -> RbResult<Json<db::Section>>
|
||||
{
|
||||
Ok(Json(conn
|
||||
.run(move |c| db::sections::create(c, &new_section.into_inner()))
|
||||
.await?))
|
||||
Ok(Json(
|
||||
conn.run(move |c| db::sections::create(c, &new_section.into_inner()))
|
||||
.await?,
|
||||
))
|
||||
}
|
||||
|
|
Reference in New Issue