Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commitf0b4a46

Browse files
authored
refactor(user): move subscribes communities count to user field (#372)
* refactor(user): mv subscribed_communityies_count to user model* refactor(user): done* refactor(user): wip* refactor(user): wip
1 parentfbd42c0 commitf0b4a46

File tree

17 files changed

+98
-174
lines changed

17 files changed

+98
-174
lines changed

‎lib/groupher_server/accounts/accounts.ex‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ defmodule GroupherServer.Accounts do
2222

2323
defdelegateupdate_profile(user,attrs),to:Profile
2424
defdelegateupdate_geo(user,remote_ip),to:Profile
25+
defdelegateupdate_subscribe_count(user),to:Profile
2526
defdelegategithub_signin(github_user),to:Profile
2627
defdelegatedefault_subscribed_communities(filter),to:Profile
2728
defdelegatesubscribed_communities(user,filter),to:Profile

‎lib/groupher_server/accounts/delegates/profile.ex‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,18 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
6565
|>Repo.update()
6666
end
6767

68+
@doc"""
69+
update user's subscribed communities count
70+
"""
71+
defupdate_subscribe_count(user_id)do
72+
with{:ok,user}<-ORM.find(User,user_id)do
73+
count_query=from(sinCMS.CommunitySubscriber,where:s.user_id==^user.id)
74+
count=Repo.aggregate(count_query,:count)
75+
76+
user|>ORM.update(%{subscribed_communities_count:count})
77+
end
78+
end
79+
6880
@doc"""
6981
update geo info for user, include geo_city & remote ip
7082
"""

‎lib/groupher_server/accounts/helper/loader.ex‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ defmodule GroupherServer.Accounts.Helper.Loader do
99

1010
defdata,do:Dataloader.Ecto.new(Repo,query:&query/2)
1111

12-
defquery({"communities_subscribers",CMS.CommunitySubscriber},%{count:_})do
13-
CMS.CommunitySubscriber
14-
|>group_by([f],f.user_id)
15-
|>select([f],count(f.id))
16-
end
17-
1812
defquery({"communities_subscribers",CMS.CommunitySubscriber},%{filter:filter})do
1913
CMS.CommunitySubscriber
2014
|>QueryBuilder.filter_pack(filter)

‎lib/groupher_server/accounts/user.ex‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ defmodule GroupherServer.Accounts.User do
2525
aliasGroupherServer.CMS
2626

2727
@required_fields~w(nickname avatar)a
28-
@optional_fields~w(login nickname bio remote_ip sex location email)a
28+
@optional_fields~w(login nickname bio remote_ip sex location email subscribed_communities_count)a
2929

3030
@typet::%User{}
3131
schema"users"do
@@ -55,6 +55,7 @@ defmodule GroupherServer.Accounts.User do
5555
has_many(:followings,{"users_followings",UserFollowing})
5656

5757
has_many(:subscribed_communities,{"communities_subscribers",CMS.CommunitySubscriber})
58+
field(:subscribed_communities_count,:integer,default:0)
5859

5960
has_many(:collect_folder,{"collect_folders",CollectFolder})
6061

‎lib/groupher_server/cms/delegates/community_operation.ex‎

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
55
importShortMaps
66

77
aliasHelper.{Certification,RadarSearch,ORM}
8-
aliasGroupherServer.Accounts.User
9-
aliasGroupherServer.CMS.Delegate.PassportCURD
10-
aliasGroupherServer.Repo
118

12-
aliasGroupherServer.CMS.{
9+
aliasGroupherServer.{Accounts,CMS,Repo}
10+
11+
aliasAccounts.User
12+
aliasCMS.Delegate.PassportCURD
13+
14+
aliasCMS.{
1315
Delegate,
1416
Category,
1517
Community,
@@ -116,6 +118,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
116118
|>Multi.run(:update_community_count,fn_,%{subscribed_community:community}->
117119
CommunityCURD.update_community_count_field(community,user_id,:subscribers_count,:inc)
118120
end)
121+
|>Multi.run(:update_user_subscribe_count,fn_,_->
122+
Accounts.update_subscribe_count(user_id)
123+
end)
119124
|>Repo.transaction()
120125
|>result()
121126
end
@@ -133,6 +138,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
133138
|>Multi.run(:update_community_count,fn_,%{subscribed_community:community}->
134139
CommunityCURD.update_community_count_field(community,user_id,:subscribers_count,:inc)
135140
end)
141+
|>Multi.run(:update_user_subscribe_count,fn_,_->
142+
Accounts.update_subscribe_count(user_id)
143+
end)
136144
|>Repo.transaction()
137145
|>result()
138146
end
@@ -151,6 +159,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
151159
|>Multi.run(:update_community_count,fn_,_->
152160
CommunityCURD.update_community_count_field(community,user_id,:subscribers_count,:dec)
153161
end)
162+
|>Multi.run(:update_user_subscribe_count,fn_,_->
163+
Accounts.update_subscribe_count(user_id)
164+
end)
154165
|>Repo.transaction()
155166
|>result()
156167
else
@@ -176,6 +187,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
176187
|>Multi.run(:update_community_count,fn_,_->
177188
CommunityCURD.update_community_count_field(community,user_id,:subscribers_count,:dec)
178189
end)
190+
|>Multi.run(:update_user_subscribe_count,fn_,_->
191+
Accounts.update_subscribe_count(user_id)
192+
end)
179193
|>Multi.run(:update_community_geo,fn_,_->
180194
update_community_geo(community_id,user_id,remote_ip,:dec)
181195
end)
@@ -204,6 +218,9 @@ defmodule GroupherServer.CMS.Delegate.CommunityOperation do
204218
|>Multi.run(:update_community_count,fn_,_->
205219
CommunityCURD.update_community_count_field(community,user_id,:subscribers_count,:dec)
206220
end)
221+
|>Multi.run(:update_user_subscribe_count,fn_,_->
222+
Accounts.update_subscribe_count(user_id)
223+
end)
207224
|>Multi.run(:update_community_geo_city,fn_,_->
208225
update_community_geo_map(community.id,city,:dec)
209226
end)

‎lib/groupher_server_web/resolvers/accounts_resolver.ex‎

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -254,25 +254,16 @@ defmodule GroupherServerWeb.Resolvers.Accounts do
254254
Accounts.mark_mail_read(%SysNotificationMail{id:id},cur_user)
255255
end
256256

257-
defsubscribed_communities(%{id:id},%{filter:filter},_info)do
258-
Accounts.subscribed_communities(%User{id:id},filter)
259-
end
260-
261-
# for user self's
262-
defsubscribed_communities(_root,%{filter:filter},%{context:%{cur_user:cur_user}})do
263-
Accounts.subscribed_communities(%User{id:cur_user.id},filter)
264-
end
265-
266-
defsubscribed_communities(_root,%{user_id:"",filter:filter},_info)do
267-
Accounts.default_subscribed_communities(filter)
268-
end
269-
270257
# for check other users subscribed_communities
271-
defsubscribed_communities(_root,%{user_id:user_id,filter:filter},_info)do
272-
Accounts.subscribed_communities(%User{id:user_id},filter)
258+
defsubscribed_communities(_root,%{login:login,filter:filter},_info)do
259+
with{:ok,user_id}<-Accounts.get_userid_and_cache(login)do
260+
Accounts.subscribed_communities(%User{id:user_id},filter)
261+
else
262+
_->raise_error(:not_exsit,"#{login} not found")
263+
end
273264
end
274265

275-
defsubscribed_communities(_root,%{filter:filter},_info)do
266+
defsubscribed_communities(_root,%{filter:filter}=args,_info)do
276267
Accounts.default_subscribed_communities(filter)
277268
end
278269

‎lib/groupher_server_web/schema/account/account_queries.ex‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ defmodule GroupherServerWeb.Schema.Account.Queries do
2727

2828
@desc"anyone can get anyone's subscribed communities"
2929
field:subscribed_communities,:paged_communitiesdo
30-
arg(:user_id,:id)
30+
arg(:login,:string)
3131
arg(:filter,non_null(:paged_filter))
3232

3333
middleware(M.PageSizeProof)

‎lib/groupher_server_web/schema/account/account_types.ex‎

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,7 @@ defmodule GroupherServerWeb.Schema.Account.Types do
6161
resolve(&R.Accounts.get_passport/3)
6262
end
6363

64-
# field :subscribed_communities, list_of(:community) do
65-
# arg(:filter, :members_filter)
66-
67-
# middleware(M.PageSizeProof)
68-
# resolve(dataloader(Accounts, :subscribed_communities))
69-
# end
70-
@desc"paged communities subscribed by this user"
71-
field:subscribed_communities,:paged_communitiesdo
72-
arg(:filter,:paged_filter)
73-
74-
middleware(M.PageSizeProof)
75-
resolve(&R.Accounts.subscribed_communities/3)
76-
end
77-
78-
field:subscribed_communities_count,:integerdo
79-
arg(:count,:count_type,default_value::count)
80-
81-
resolve(dataloader(Accounts,:subscribed_communities))
82-
middleware(M.ConvertToInt)
83-
end
64+
field(:subscribed_communities_count,:integer)
8465

8566
@desc"paged communities which the user it's the editor"
8667
field:editable_communities,:paged_communitiesdo
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmoduleGroupherServer.Repo.Migrations.AddSubscribeCountToUsersdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
altertable(:users)do
6+
add(:subscribed_communities_count,:integer)
7+
end
8+
end
9+
end

‎test/groupher_server_web/mutation/cms/cms_test.exs‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ defmodule GroupherServer.Test.Mutation.CMS.Basic do
33

44
useGroupherServer.TestTools
55

6-
aliasGroupherServer.CMS
6+
aliasGroupherServer.{Accounts,CMS}
7+
8+
aliasAccounts.User
79
aliasCMS.{Category,Community,CommunityEditor,Passport}
810

911
aliasHelper.ORM
@@ -495,6 +497,17 @@ defmodule GroupherServer.Test.Mutation.CMS.Basic do
495497
assertcreated["id"]==to_string(community.id)
496498
end
497499

500+
test"subscribe should update user's subscribed count",~m(user community)ado
501+
login_conn=simu_conn(:user,user)
502+
503+
variables=%{communityId:community.id}
504+
created=login_conn|>mutation_result(@subscribe_query,variables,"subscribeCommunity")
505+
506+
{:ok,user}=ORM.find(User,user.id)
507+
508+
assertuser.subscribed_communities_count==1
509+
end
510+
498511
test"login user subscribe non-exsit community fails",~m(user)ado
499512
login_conn=simu_conn(:user,user)
500513
variables=%{communityId:non_exsit_id()}
@@ -555,6 +568,21 @@ defmodule GroupherServer.Test.Mutation.CMS.Basic do
555568
assertfalse==cur_subscribers.entries|>Enum.any?(&(&1.id==user.id))
556569
end
557570

571+
test"unsubscribe should update user's subscribed count",~m(user community)ado
572+
login_conn=simu_conn(:user,user)
573+
574+
variables=%{communityId:community.id}
575+
created=login_conn|>mutation_result(@subscribe_query,variables,"subscribeCommunity")
576+
577+
{:ok,user}=ORM.find(User,user.id)
578+
assertuser.subscribed_communities_count==1
579+
580+
login_conn|>mutation_result(@unsubscribe_query,variables,"unsubscribeCommunity")
581+
582+
{:ok,user}=ORM.find(User,user.id)
583+
assertuser.subscribed_communities_count==0
584+
end
585+
558586
test"other login user unsubscribe community fails",~m(user_conn community)ado
559587
variables=%{communityId:community.id}
560588

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp