]> Untitled Git - lemmy.git/blob - lemmy_apub/src/activities/receive/post_undo.rs
Merge pull request #1328 from LemmyNet/move_views_to_diesel
[lemmy.git] / lemmy_apub / src / activities / receive / post_undo.rs
1 use crate::activities::receive::get_actor_as_user;
2 use activitystreams::activity::{Dislike, Like};
3 use lemmy_db_queries::{source::post::Post_, Likeable};
4 use lemmy_db_schema::source::post::{Post, PostLike};
5 use lemmy_db_views::post_view::PostView;
6 use lemmy_structs::{blocking, post::PostResponse};
7 use lemmy_utils::LemmyError;
8 use lemmy_websocket::{messages::SendPost, LemmyContext, UserOperation};
9
10 pub(crate) async fn receive_undo_like_post(
11   like: &Like,
12   post: Post,
13   context: &LemmyContext,
14   request_counter: &mut i32,
15 ) -> Result<(), LemmyError> {
16   let user = get_actor_as_user(like, context, request_counter).await?;
17
18   let post_id = post.id;
19   let user_id = user.id;
20   blocking(context.pool(), move |conn| {
21     PostLike::remove(conn, user_id, post_id)
22   })
23   .await??;
24
25   // Refetch the view
26   let post_view = blocking(context.pool(), move |conn| {
27     PostView::read(conn, post_id, None)
28   })
29   .await??;
30
31   let res = PostResponse { post_view };
32
33   context.chat_server().do_send(SendPost {
34     op: UserOperation::CreatePostLike,
35     post: res,
36     websocket_id: None,
37   });
38
39   Ok(())
40 }
41
42 pub(crate) async fn receive_undo_dislike_post(
43   dislike: &Dislike,
44   post: Post,
45   context: &LemmyContext,
46   request_counter: &mut i32,
47 ) -> Result<(), LemmyError> {
48   let user = get_actor_as_user(dislike, context, request_counter).await?;
49
50   let post_id = post.id;
51   let user_id = user.id;
52   blocking(context.pool(), move |conn| {
53     PostLike::remove(conn, user_id, post_id)
54   })
55   .await??;
56
57   // Refetch the view
58   let post_view = blocking(context.pool(), move |conn| {
59     PostView::read(conn, post_id, None)
60   })
61   .await??;
62
63   let res = PostResponse { post_view };
64
65   context.chat_server().do_send(SendPost {
66     op: UserOperation::CreatePostLike,
67     post: res,
68     websocket_id: None,
69   });
70
71   Ok(())
72 }
73
74 pub(crate) async fn receive_undo_delete_post(
75   context: &LemmyContext,
76   post: Post,
77 ) -> Result<(), LemmyError> {
78   let deleted_post = blocking(context.pool(), move |conn| {
79     Post::update_deleted(conn, post.id, false)
80   })
81   .await??;
82
83   // Refetch the view
84   let post_id = deleted_post.id;
85   let post_view = blocking(context.pool(), move |conn| {
86     PostView::read(conn, post_id, None)
87   })
88   .await??;
89
90   let res = PostResponse { post_view };
91   context.chat_server().do_send(SendPost {
92     op: UserOperation::EditPost,
93     post: res,
94     websocket_id: None,
95   });
96
97   Ok(())
98 }
99
100 pub(crate) async fn receive_undo_remove_post(
101   context: &LemmyContext,
102   post: Post,
103 ) -> Result<(), LemmyError> {
104   let removed_post = blocking(context.pool(), move |conn| {
105     Post::update_removed(conn, post.id, false)
106   })
107   .await??;
108
109   // Refetch the view
110   let post_id = removed_post.id;
111   let post_view = blocking(context.pool(), move |conn| {
112     PostView::read(conn, post_id, None)
113   })
114   .await??;
115
116   let res = PostResponse { post_view };
117
118   context.chat_server().do_send(SendPost {
119     op: UserOperation::EditPost,
120     post: res,
121     websocket_id: None,
122   });
123
124   Ok(())
125 }