From 3fb47c7fc2b126b06516875ea172d3816af1685e Mon Sep 17 00:00:00 2001 From: hole-thu Date: Thu, 17 Mar 2022 16:14:07 +0800 Subject: [PATCH] feat: edit cw --- src/api/post.rs | 19 ++++++++++++++++++- src/main.rs | 7 +++---- src/models.rs | 6 +++++- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/api/post.rs b/src/api/post.rs index e085190..6c19029 100644 --- a/src/api/post.rs +++ b/src/api/post.rs @@ -1,5 +1,6 @@ use crate::api::comment::{c2output, CommentOutput}; use crate::api::{APIError, CurrentUser, PolicyError::*, API}; +use crate::db_conn::DbConn; use crate::models::*; use chrono::NaiveDateTime; use rocket::form::Form; @@ -7,7 +8,6 @@ use rocket::serde::{ json::{json, Value}, Serialize, }; -use crate::db_conn::DbConn; #[derive(FromForm)] pub struct PostInput<'r> { @@ -40,6 +40,13 @@ pub struct PostOutput { reply: i32, } +#[derive(FromForm)] +pub struct CwInput<'r> { + pid: i32, + #[field(validate = len(0..33))] + cw: &'r str, +} + fn p2output(p: &Post, user: &CurrentUser, conn: &DbConn) -> PostOutput { PostOutput { pid: p.id, @@ -131,3 +138,13 @@ pub fn publish_post(poi: Form, user: CurrentUser, conn: DbConn) -> AP "code": 0 })) } + +#[post("/editcw", data = "")] +pub fn edit_cw(cwi: Form, user: CurrentUser, conn: DbConn) -> API { + let p = Post::get(&conn, cwi.pid).map_err(APIError::from_db)?; + if !(user.is_admin || p.author_hash == user.namehash) { + return Err(APIError::PcError(NotAllowed)); + } + _ = p.update_cw(&conn, cwi.cw); + Ok(json!({"code": 0})) +} diff --git a/src/main.rs b/src/main.rs index 00b631a..c9e79af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,16 +4,14 @@ extern crate rocket; #[macro_use] extern crate diesel; - mod api; +mod db_conn; mod models; mod random_hasher; mod schema; -mod db_conn; - -use random_hasher::RandomHasher; use db_conn::init_pool; +use random_hasher::RandomHasher; #[launch] fn rocket() -> _ { @@ -26,6 +24,7 @@ fn rocket() -> _ { api::post::get_list, api::post::get_one, api::post::publish_post, + api::post::edit_cw, api::systemlog::get_systemlog, ], ) diff --git a/src/models.rs b/src/models.rs index 6acbd2e..5a11dd7 100644 --- a/src/models.rs +++ b/src/models.rs @@ -12,7 +12,7 @@ type MR = Result; no_arg_sql_function!(RANDOM, (), "Represents the sql RANDOM() function"); -#[derive(Queryable, Debug)] +#[derive(Queryable, Identifiable)] pub struct Post { pub id: i32, pub author_hash: String, @@ -82,6 +82,10 @@ impl Post { // TODO: tags insert_into(posts::table).values(&new_post).execute(conn) } + + pub fn update_cw(&self, conn: &Conn, new_cw: &str) -> MR { + diesel::update(self).set(posts::cw.eq(new_cw)).execute(conn) + } } #[derive(Queryable, Debug)]