@@ -3,27 +3,20 @@ defmodule GroupherServer.Accounts.Delegate.Publish do
33 user followers / following related
44 """
55 import Ecto.Query , warn: false
6- import Helper.Utils , only: [ done: 1 , ensure: 2 ]
7- # import Helper.ErrorCode
8- import ShortMaps
6+ import Helper.Utils , only: [ ensure: 2 ]
97
10- import GroupherServer.CMS.Helper.Matcher
8+ alias GroupherServer . { Accounts , CMS }
9+ alias Accounts.Model . { Embeds , User }
1110
12- alias GroupherServer.Accounts.Model . { Embeds , User }
13- alias GroupherServer.CMS.Model.Comment
14-
15- alias Helper . { ORM , QueryBuilder }
11+ alias Helper.ORM
1612
1713 @ default_meta Embeds.UserMeta . default_meta ( )
1814
1915 @ doc """
2016 get paged published contets of a user
2117 """
2218 def paged_published_articles ( % User { id: user_id } , thread , filter ) do
23- with { :ok , info } <- match ( thread ) ,
24- { :ok , user } <- ORM . find ( User , user_id ) do
25- do_paged_published_articles ( info . model , user , filter )
26- end
19+ CMS . paged_published_articles ( thread , filter , user_id )
2720 end
2821
2922 @ doc """
@@ -32,60 +25,21 @@ defmodule GroupherServer.Accounts.Delegate.Publish do
3225 def update_published_states ( user_id , thread ) do
3326 filter = % { page: 1 , size: 1 }
3427
35- with { :ok , info } <- match ( thread ) ,
36- { :ok , user } <- ORM . find ( User , user_id ) ,
37- { :ok , paged_published_articles } <- do_paged_published_articles ( info . model , user , filter ) do
38- articles_count = paged_published_articles . total_count
39-
40- meta =
41- ensure ( user . meta , @ default_meta ) |> Map . put ( :"published_#{ thread } s_count" , articles_count )
28+ with { :ok , user } <- ORM . find ( User , user_id ) ,
29+ { :ok , paged_articles } <- CMS . paged_published_articles ( thread , filter , user_id ) do
30+ #
31+ user_meta = ensure ( user . meta , @ default_meta )
32+ meta = Map . put ( user_meta , :"published_#{ thread } s_count" , paged_articles . total_count )
4233
4334 ORM . update_meta ( user , meta )
4435 end
4536 end
4637
47- defp do_paged_published_articles ( queryable , % User { } = user , % { page: page , size: size } = filter ) do
48- queryable
49- |> join ( :inner , [ article ] , author in assoc ( article , :author ) )
50- |> where ( [ article , author ] , author . user_id == ^ user . id )
51- |> select ( [ article , author ] , article )
52- |> QueryBuilder . filter_pack ( filter )
53- |> ORM . paginater ( ~m( page size) a )
54- |> done ( )
38+ def paged_published_comments ( user , filter ) do
39+ CMS . paged_published_comments ( user , filter )
5540 end
5641
57- def paged_published_article_comments ( % User { id: user_id } , % { page: page , size: size } = filter ) do
58- with { :ok , user } <- ORM . find ( User , user_id ) do
59- Comment
60- |> join ( :inner , [ comment ] , author in assoc ( comment , :author ) )
61- |> where ( [ comment , author ] , author . id == ^ user . id )
62- |> QueryBuilder . filter_pack ( filter )
63- |> ORM . paginater ( ~m( page size) a )
64- |> ORM . extract_and_assign_article ( )
65- |> done ( )
66- end
67- end
68-
69- def paged_published_article_comments (
70- % User { id: user_id } ,
71- thread ,
72- % { page: page , size: size } = filter
73- ) do
74- with { :ok , user } <- ORM . find ( User , user_id ) do
75- thread = thread |> to_string |> String . upcase ( )
76- thread_atom = thread |> String . downcase ( ) |> String . to_atom ( )
77-
78- article_preload = Keyword . new ( [ { thread_atom , [ author: :user ] } ] )
79- query = from ( comment in Comment , preload: ^ article_preload )
80-
81- query
82- |> join ( :inner , [ comment ] , author in assoc ( comment , :author ) )
83- |> where ( [ comment , author ] , author . id == ^ user . id )
84- |> where ( [ comment , author ] , comment . thread == ^ thread )
85- |> QueryBuilder . filter_pack ( filter )
86- |> ORM . paginater ( ~m( page size) a )
87- |> ORM . extract_and_assign_article ( )
88- |> done ( )
89- end
42+ def paged_published_comments ( user , thread , filter ) do
43+ CMS . paged_published_comments ( user , thread , filter )
9044 end
9145end
0 commit comments