@@ -364,15 +364,14 @@ defmodule GroupherServer.CMS.Delegate.ArticleComment do
364364 with { :ok , comment } <- ORM . find ( ArticleComment , comment_id ) ,
365365 false <- comment . is_deleted do
366366 # TODO: is user upvoted before?
367- # IO.inspect(comment, label: "the comment")
368367 Multi . new ( )
369368 |> Multi . run ( :create_comment_upvote , fn _ , _ ->
370369 ORM . create ( ArticleCommentUpvote , % { article_comment_id: comment . id , user_id: user_id } )
371370 end )
372371 |> Multi . run ( :add_upvoted_user , fn _ , _ ->
373372 update_upvoted_user_list ( comment , user_id , :add )
374373 end )
375- |> Multi . run ( :inc_upvotes_count , fn _ , _ ->
374+ |> Multi . run ( :inc_upvotes_count , fn _ , % { add_upvoted_user: comment } ->
376375 count_query = from ( c in ArticleCommentUpvote , where: c . article_comment_id == ^ comment . id )
377376 upvotes_count = Repo . aggregate ( count_query , :count )
378377 ORM . update ( comment , % { upvotes_count: upvotes_count } )
@@ -385,20 +384,6 @@ defmodule GroupherServer.CMS.Delegate.ArticleComment do
385384 end
386385 end
387386
388- defp update_upvoted_user_list ( comment , user_id , opt ) do
389- IO . inspect ( comment . meta , label: "update_upvoted_user_list meta" )
390- cur_user_ids = get_in ( comment , [ :meta , :upvoted_user_ids ] )
391-
392- user_ids =
393- case opt do
394- :add -> [ user_id ] ++ cur_user_ids
395- :remove -> cur_user_ids -- [ user_id ]
396- end
397-
398- meta = comment . meta |> Map . merge ( % { upvoted_user_ids: user_ids } ) |> strip_struct
399- ORM . update_meta ( comment , meta )
400- end
401-
402387 @ doc "upvote a comment"
403388 def undo_upvote_article_comment ( comment_id , % User { id: user_id } ) do
404389 with { :ok , comment } <- ORM . find ( ArticleComment , comment_id ) ,
@@ -410,7 +395,10 @@ defmodule GroupherServer.CMS.Delegate.ArticleComment do
410395 user_id: user_id
411396 } )
412397 end )
413- |> Multi . run ( :desc_upvotes_count , fn _ , _ ->
398+ |> Multi . run ( :remove_upvoted_user , fn _ , _ ->
399+ update_upvoted_user_list ( comment , user_id , :remove )
400+ end )
401+ |> Multi . run ( :desc_upvotes_count , fn _ , % { remove_upvoted_user: comment } ->
414402 count_query = from ( c in ArticleCommentUpvote , where: c . article_comment_id == ^ comment_id )
415403 upvotes_count = Repo . aggregate ( count_query , :count )
416404
@@ -437,6 +425,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleComment do
437425 |> ORM . paginater ( ~m( page size) a )
438426 |> set_viewer_emotion_ifneed ( user )
439427 |> add_pined_comments_ifneed ( thread , article_id , filters )
428+ |> mark_viewer_has_upvoted ( user )
440429 |> done ( )
441430 end
442431 end
@@ -453,6 +442,7 @@ defmodule GroupherServer.CMS.Delegate.ArticleComment do
453442 |> QueryBuilder . filter_pack ( filters )
454443 |> ORM . paginater ( ~m( page size) a )
455444 |> set_viewer_emotion_ifneed ( user )
445+ |> mark_viewer_has_upvoted ( user )
456446 |> done ( )
457447 end
458448
@@ -625,6 +615,18 @@ defmodule GroupherServer.CMS.Delegate.ArticleComment do
625615 % { paged_comments | entries: new_entries }
626616 end
627617
618+ defp mark_viewer_has_upvoted ( paged_comments , nil ) , do: paged_comments
619+
620+ defp mark_viewer_has_upvoted ( % { entries: entries } = paged_comments , % User { } = user ) do
621+ entries =
622+ Enum . map (
623+ entries ,
624+ & Map . merge ( & 1 , % { viewer_has_upvoted: Enum . member? ( & 1 . meta . upvoted_user_ids , user . id ) } )
625+ )
626+
627+ Map . merge ( paged_comments , % { entries: entries } )
628+ end
629+
628630 defp get_article ( % ArticleComment { post_id: post_id } = comment ) when not is_nil ( post_id ) do
629631 with { :ok , article } <- ORM . find ( Post , comment . post_id , preload: [ author: :user ] ) do
630632 { :post , article }
@@ -692,6 +694,19 @@ defmodule GroupherServer.CMS.Delegate.ArticleComment do
692694 end
693695 end
694696
697+ defp update_upvoted_user_list ( comment , user_id , opt ) do
698+ cur_user_ids = get_in ( comment , [ :meta , :upvoted_user_ids ] )
699+
700+ user_ids =
701+ case opt do
702+ :add -> [ user_id ] ++ cur_user_ids
703+ :remove -> cur_user_ids -- [ user_id ]
704+ end
705+
706+ meta = comment . meta |> Map . merge ( % { upvoted_user_ids: user_ids } ) |> strip_struct
707+ ORM . update_meta ( comment , meta )
708+ end
709+
695710 defp upsert_comment_result ( { :ok , % { create_article_comment: result } } ) , do: { :ok , result }
696711 defp upsert_comment_result ( { :ok , % { add_reply_to: result } } ) , do: { :ok , result }
697712 defp upsert_comment_result ( { :ok , % { check_article_author_upvoted: result } } ) , do: { :ok , result }
0 commit comments