3 comment::send_websocket_message as send_comment_message,
4 post::send_websocket_message as send_post_message,
7 objects::get_or_fetch_and_insert_post_or_comment,
8 person::get_or_fetch_and_upsert_person,
12 use lemmy_api_common::blocking;
13 use lemmy_db_queries::Likeable;
14 use lemmy_db_schema::source::{
15 comment::{Comment, CommentLike, CommentLikeForm},
16 post::{Post, PostLike, PostLikeForm},
18 use lemmy_utils::LemmyError;
19 use lemmy_websocket::{LemmyContext, UserOperation};
28 pub(in crate::activities::voting) async fn receive_like_or_dislike(
32 context: &LemmyContext,
33 request_counter: &mut i32,
34 ) -> Result<(), LemmyError> {
35 match get_or_fetch_and_insert_post_or_comment(object, context, request_counter).await? {
36 PostOrComment::Post(p) => {
37 like_or_dislike_post(score, actor, p.deref(), context, request_counter).await
39 PostOrComment::Comment(c) => {
40 like_or_dislike_comment(score, actor, c.deref(), context, request_counter).await
45 async fn like_or_dislike_comment(
49 context: &LemmyContext,
50 request_counter: &mut i32,
51 ) -> Result<(), LemmyError> {
52 let actor = get_or_fetch_and_upsert_person(actor, context, request_counter).await?;
54 let comment_id = comment.id;
55 let like_form = CommentLikeForm {
57 post_id: comment.post_id,
61 let person_id = actor.id;
62 blocking(context.pool(), move |conn| {
63 CommentLike::remove(conn, person_id, comment_id)?;
64 CommentLike::like(conn, &like_form)
71 UserOperation::CreateCommentLike,
77 async fn like_or_dislike_post(
81 context: &LemmyContext,
82 request_counter: &mut i32,
83 ) -> Result<(), LemmyError> {
84 let actor = get_or_fetch_and_upsert_person(actor, context, request_counter).await?;
86 let post_id = post.id;
87 let like_form = PostLikeForm {
92 let person_id = actor.id;
93 blocking(context.pool(), move |conn| {
94 PostLike::remove(conn, person_id, post_id)?;
95 PostLike::like(conn, &like_form)
99 send_post_message(post.id, UserOperation::CreatePostLike, context).await
102 pub(in crate::activities::voting) async fn receive_undo_like_or_dislike(
105 context: &LemmyContext,
106 request_counter: &mut i32,
107 ) -> Result<(), LemmyError> {
108 match get_or_fetch_and_insert_post_or_comment(object, context, request_counter).await? {
109 PostOrComment::Post(p) => {
110 undo_like_or_dislike_post(actor, p.deref(), context, request_counter).await
112 PostOrComment::Comment(c) => {
113 undo_like_or_dislike_comment(actor, c.deref(), context, request_counter).await
118 async fn undo_like_or_dislike_comment(
121 context: &LemmyContext,
122 request_counter: &mut i32,
123 ) -> Result<(), LemmyError> {
124 let actor = get_or_fetch_and_upsert_person(actor, context, request_counter).await?;
126 let comment_id = comment.id;
127 let person_id = actor.id;
128 blocking(context.pool(), move |conn| {
129 CommentLike::remove(conn, person_id, comment_id)
133 send_comment_message(
136 UserOperation::CreateCommentLike,
142 async fn undo_like_or_dislike_post(
145 context: &LemmyContext,
146 request_counter: &mut i32,
147 ) -> Result<(), LemmyError> {
148 let actor = get_or_fetch_and_upsert_person(actor, context, request_counter).await?;
150 let post_id = post.id;
151 let person_id = actor.id;
152 blocking(context.pool(), move |conn| {
153 PostLike::remove(conn, person_id, post_id)
156 send_post_message(post.id, UserOperation::CreatePostLike, context).await