@@ -6,6 +6,7 @@ defmodule MastaniServer.Accounts.Delegate.Profile do
66 import Helper.Utils , only: [ done: 1 , get_config: 2 ]
77 import ShortMaps
88
9+ alias MastaniServer.Accounts
910 alias Helper . { Guardian , ORM , QueryBuilder , RadarSearch }
1011 alias MastaniServer.Accounts . { Achievement , GithubUser , User }
1112 alias MastaniServer . { CMS , Repo }
@@ -47,9 +48,6 @@ defmodule MastaniServer.Accounts.Delegate.Profile do
4748 update geo info for user, include geo_city & remote ip
4849 """
4950 def update_geo ( % User { geo_city: geo_city } = user , remote_ip ) when is_nil ( geo_city ) do
50- IO . inspect ( geo_city , label: "update_geo geo_city nil" )
51- IO . inspect ( remote_ip , label: "update_geo remote_ip" )
52-
5351 case RadarSearch . locate_city ( remote_ip ) do
5452 { :ok , city } ->
5553 update_profile ( user , % { geo_city: city , remote_ip: remote_ip } )
@@ -60,15 +58,8 @@ defmodule MastaniServer.Accounts.Delegate.Profile do
6058 end
6159 end
6260
63- def update_geo ( % User { } = user , remote_ip ) do
64- IO . inspect ( user , label: "update_geo geo_city not nil" )
65- IO . inspect ( remote_ip , label: "update_geo geo_city not nil remote_ip" )
66- update_profile ( user , % { remote_ip: remote_ip } )
67- end
68-
69- def update_geo ( _user , _remote_ip ) do
70- { :ok , "pass" }
71- end
61+ def update_geo ( % User { } = user , remote_ip ) , do: update_profile ( user , % { remote_ip: remote_ip } )
62+ def update_geo ( _user , _remote_ip ) , do: { :ok , "pass" }
7263
7364 @ doc """
7465 github_signin steps:
@@ -101,18 +92,38 @@ defmodule MastaniServer.Accounts.Delegate.Profile do
10192 @ doc """
10293 get users subscribed communities
10394 """
104- def subscribed_communities ( % User { id: id } , % { page: page , size: size } = filter ) do
95+ def subscribed_communities ( % User { id: id } = user , % { page: page , size: size } = filter ) do
10596 filter = filter |> Map . delete ( :first )
106-
97+ # TODO: merge customed index
10798 CMS.CommunitySubscriber
10899 |> where ( [ c ] , c . user_id == ^ id )
109100 |> join ( :inner , [ c ] , cc in assoc ( c , :community ) )
110101 |> select ( [ c , cc ] , cc )
111102 |> QueryBuilder . filter_pack ( filter )
112103 |> ORM . paginater ( ~m( page size) a )
104+ |> sort_communities ( user )
113105 |> done ( )
114106 end
115107
108+ # sort by users sort customization
109+ defp sort_communities ( paged_communities , user ) do
110+ with { :ok , customization } <- Accounts . get_customization ( user ) do
111+ case Enum . empty? ( customization . sidebar_communities_index ) do
112+ true ->
113+ paged_communities
114+
115+ false ->
116+ entries =
117+ Enum . map ( paged_communities . entries , fn c ->
118+ index = Map . get ( customization . sidebar_communities_index , c . raw , 100_000 )
119+ % { c | index: index }
120+ end )
121+
122+ % { paged_communities | entries: entries }
123+ end
124+ end
125+ end
126+
116127 defp register_github_user ( github_profile ) do
117128 Multi . new ( )
118129 |> Multi . run ( :create_user , fn _ ->
0 commit comments