X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Fimpls%2Fcomment_report.rs;h=19c12876f7679d8523060a78d7e1665b2b7587a9;hb=f7f6766650b9b573a72075e564aed353c0131cd7;hp=56e917e028f0135effae2521ef156ff9fc20f8d8;hpb=3aa3d75a1e04b6ed4bc7566f86f45e6883c5c39b;p=lemmy.git diff --git a/crates/db_schema/src/impls/comment_report.rs b/crates/db_schema/src/impls/comment_report.rs index 56e917e0..19c12876 100644 --- a/crates/db_schema/src/impls/comment_report.rs +++ b/crates/db_schema/src/impls/comment_report.rs @@ -1,23 +1,39 @@ use crate::{ - newtypes::{CommentReportId, PersonId}, + newtypes::{CommentId, CommentReportId, PersonId}, + schema::comment_report::{ + comment_id, + dsl::{comment_report, resolved, resolver_id, updated}, + }, source::comment_report::{CommentReport, CommentReportForm}, traits::Reportable, - utils::naive_now, + utils::{get_conn, naive_now, DbPool}, }; -use diesel::{dsl::*, result::Error, *}; +use diesel::{ + dsl::{insert_into, update}, + result::Error, + ExpressionMethods, + QueryDsl, +}; +use diesel_async::RunQueryDsl; +#[async_trait] impl Reportable for CommentReport { type Form = CommentReportForm; type IdType = CommentReportId; + type ObjectIdType = CommentId; /// creates a comment report and returns it /// /// * `conn` - the postgres connection /// * `comment_report_form` - the filled CommentReportForm to insert - fn report(conn: &PgConnection, comment_report_form: &CommentReportForm) -> Result { - use crate::schema::comment_report::dsl::*; + async fn report( + pool: &mut DbPool<'_>, + comment_report_form: &CommentReportForm, + ) -> Result { + let conn = &mut get_conn(pool).await?; insert_into(comment_report) .values(comment_report_form) .get_result::(conn) + .await } /// resolve a comment report @@ -25,19 +41,36 @@ impl Reportable for CommentReport { /// * `conn` - the postgres connection /// * `report_id` - the id of the report to resolve /// * `by_resolver_id` - the id of the user resolving the report - fn resolve( - conn: &PgConnection, - report_id: Self::IdType, + async fn resolve( + pool: &mut DbPool<'_>, + report_id_: Self::IdType, + by_resolver_id: PersonId, + ) -> Result { + let conn = &mut get_conn(pool).await?; + update(comment_report.find(report_id_)) + .set(( + resolved.eq(true), + resolver_id.eq(by_resolver_id), + updated.eq(naive_now()), + )) + .execute(conn) + .await + } + + async fn resolve_all_for_object( + pool: &mut DbPool<'_>, + comment_id_: CommentId, by_resolver_id: PersonId, ) -> Result { - use crate::schema::comment_report::dsl::*; - update(comment_report.find(report_id)) + let conn = &mut get_conn(pool).await?; + update(comment_report.filter(comment_id.eq(comment_id_))) .set(( resolved.eq(true), resolver_id.eq(by_resolver_id), updated.eq(naive_now()), )) .execute(conn) + .await } /// unresolve a comment report @@ -45,18 +78,19 @@ impl Reportable for CommentReport { /// * `conn` - the postgres connection /// * `report_id` - the id of the report to unresolve /// * `by_resolver_id` - the id of the user unresolving the report - fn unresolve( - conn: &PgConnection, - report_id: Self::IdType, + async fn unresolve( + pool: &mut DbPool<'_>, + report_id_: Self::IdType, by_resolver_id: PersonId, ) -> Result { - use crate::schema::comment_report::dsl::*; - update(comment_report.find(report_id)) + let conn = &mut get_conn(pool).await?; + update(comment_report.find(report_id_)) .set(( resolved.eq(false), resolver_id.eq(by_resolver_id), updated.eq(naive_now()), )) .execute(conn) + .await } }