@@ -160,7 +160,6 @@ defmodule GroupherServer.CMS.Delegate.ArticleCommentAction do
160
160
def upvote_article_comment ( comment_id , % User { id: user_id } ) do
161
161
with { :ok , comment } <- ORM . find ( ArticleComment , comment_id ) ,
162
162
false <- comment . is_deleted do
163
- # TODO: is user upvoted before?
164
163
Multi . new ( )
165
164
|> Multi . run ( :create_comment_upvote , fn _ , _ ->
166
165
ORM . create ( ArticleCommentUpvote , % { article_comment_id: comment . id , user_id: user_id } )
@@ -176,6 +175,15 @@ defmodule GroupherServer.CMS.Delegate.ArticleCommentAction do
176
175
|> Multi . run ( :check_article_author_upvoted , fn _ , % { inc_upvotes_count: comment } ->
177
176
update_article_author_upvoted_info ( comment , user_id )
178
177
end )
178
+ |> Multi . run ( :upvote_comment_done , fn _ , % { check_article_author_upvoted: comment } ->
179
+ viewer_has_upvoted = Enum . member? ( comment . meta . upvoted_user_ids , user_id )
180
+ viewer_has_reported = Enum . member? ( comment . meta . reported_user_ids , user_id )
181
+
182
+ comment
183
+ |> Map . merge ( % { viewer_has_upvoted: viewer_has_upvoted } )
184
+ |> Map . merge ( % { viewer_has_reported: viewer_has_reported } )
185
+ |> done
186
+ end )
179
187
|> Repo . transaction ( )
180
188
|> result ( )
181
189
end
@@ -204,6 +212,15 @@ defmodule GroupherServer.CMS.Delegate.ArticleCommentAction do
204
212
|> Multi . run ( :check_article_author_upvoted , fn _ , % { desc_upvotes_count: updated_comment } ->
205
213
update_article_author_upvoted_info ( updated_comment , user_id )
206
214
end )
215
+ |> Multi . run ( :upvote_comment_done , fn _ , % { check_article_author_upvoted: comment } ->
216
+ viewer_has_upvoted = Enum . member? ( comment . meta . upvoted_user_ids , user_id )
217
+ viewer_has_reported = Enum . member? ( comment . meta . reported_user_ids , user_id )
218
+
219
+ comment
220
+ |> Map . merge ( % { viewer_has_upvoted: viewer_has_upvoted } )
221
+ |> Map . merge ( % { viewer_has_reported: viewer_has_reported } )
222
+ |> done
223
+ end )
207
224
|> Repo . transaction ( )
208
225
|> result ( )
209
226
end
@@ -234,20 +251,13 @@ defmodule GroupherServer.CMS.Delegate.ArticleCommentAction do
234
251
defp update_article_author_upvoted_info ( % ArticleComment { } = comment , user_id ) do
235
252
with { :ok , article } = get_full_comment ( comment . id ) do
236
253
is_article_author_upvoted = article . author . id == user_id
237
-
238
- new_meta =
239
- comment . meta
240
- |> Map . from_struct ( )
241
- |> Map . merge ( % { is_article_author_upvoted: is_article_author_upvoted } )
242
-
243
- comment |> ORM . update ( % { meta: new_meta } )
254
+ meta = comment . meta |> Map . put ( :is_article_author_upvoted , is_article_author_upvoted )
255
+ comment |> ORM . update_meta ( meta )
244
256
end
245
257
end
246
258
247
259
# 设计盖楼只保留一个层级,回复楼中的评论都会被放到顶楼的 replies 中
248
- defp get_parent_comment ( % ArticleComment { reply_to_id: nil } = comment ) do
249
- comment
250
- end
260
+ defp get_parent_comment ( % ArticleComment { reply_to_id: nil } = comment ) , do: comment
251
261
252
262
defp get_parent_comment ( % ArticleComment { reply_to_id: reply_to_id } = comment )
253
263
when not is_nil ( reply_to_id ) do
@@ -355,7 +365,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleCommentAction do
355
365
356
366
defp result ( { :ok , % { create_article_comment: result } } ) , do: { :ok , result }
357
367
defp result ( { :ok , % { add_reply_to: result } } ) , do: { :ok , result }
358
- defp result ( { :ok , % { check_article_author_upvoted : result } } ) , do: { :ok , result }
368
+ defp result ( { :ok , % { upvote_comment_done : result } } ) , do: { :ok , result }
359
369
defp result ( { :ok , % { fold_comment_report_too_many: result } } ) , do: { :ok , result }
360
370
defp result ( { :ok , % { update_comment_flag: result } } ) , do: { :ok , result }
361
371
defp result ( { :ok , % { delete_article_comment: result } } ) , do: { :ok , result }
0 commit comments