1 use crate::fetcher::post_or_comment::PostOrComment;
2 use lemmy_api_common::blocking;
3 use lemmy_db_queries::source::{
9 use lemmy_db_schema::source::{comment::Comment, community::Community, person::Person, post::Post};
10 use lemmy_utils::LemmyError;
11 use lemmy_websocket::LemmyContext;
13 // TODO: merge this trait with ApubObject (means that db_schema needs to depend on apub_lib)
14 #[async_trait::async_trait(?Send)]
15 pub trait DeletableApubObject {
16 // TODO: pass in tombstone with summary field, to decide between remove/delete
17 async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError>;
20 #[async_trait::async_trait(?Send)]
21 impl DeletableApubObject for Community {
22 async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError> {
24 blocking(context.pool(), move |conn| {
25 Community::update_deleted(conn, id, true)
32 #[async_trait::async_trait(?Send)]
33 impl DeletableApubObject for Person {
34 async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError> {
36 blocking(context.pool(), move |conn| Person::delete_account(conn, id)).await??;
41 #[async_trait::async_trait(?Send)]
42 impl DeletableApubObject for Post {
43 async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError> {
45 blocking(context.pool(), move |conn| {
46 Post::update_deleted(conn, id, true)
53 #[async_trait::async_trait(?Send)]
54 impl DeletableApubObject for Comment {
55 async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError> {
57 blocking(context.pool(), move |conn| {
58 Comment::update_deleted(conn, id, true)
65 #[async_trait::async_trait(?Send)]
66 impl DeletableApubObject for PostOrComment {
67 async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError> {
69 PostOrComment::Comment(c) => {
70 blocking(context.pool(), move |conn| {
71 Comment::update_deleted(conn, c.id, true)
75 PostOrComment::Post(p) => {
76 blocking(context.pool(), move |conn| {
77 Post::update_deleted(conn, p.id, true)