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.

Commit916fd52

Browse files
committed
refactor(user): follow count move to table
1 parentbb6055d commit916fd52

File tree

7 files changed

+55
-51
lines changed

7 files changed

+55
-51
lines changed

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

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ defmodule GroupherServer.Accounts.Delegate.Fans do
3535
following_id:target_user.id
3636
})
3737
)
38-
|>Multi.run(:update_user_meta,fn_,_->
39-
update_follow_meta(target_user,user_id,:add)
38+
|>Multi.run(:update_user_follow_info,fn_,_->
39+
update_user_follow_info(target_user,user_id,:add)
4040
end)
4141
|>Multi.run(:add_achievement,fn_,_->
4242
Accounts.achieve(%User{id:target_user.id},:inc,:follow)
@@ -63,8 +63,8 @@ defmodule GroupherServer.Accounts.Delegate.Fans do
6363
|>Multi.run(:delete_following,fn_,_->
6464
ORM.findby_delete!(UserFollowing,%{user_id:user_id,following_id:target_user.id})
6565
end)
66-
|>Multi.run(:update_user_meta,fn_,_->
67-
update_follow_meta(target_user,user_id,:remove)
66+
|>Multi.run(:update_user_follow_info,fn_,_->
67+
update_user_follow_info(target_user,user_id,:remove)
6868
end)
6969
|>Multi.run(:minus_achievement,fn_,_->
7070
Accounts.achieve(%User{id:target_user.id},:dec,:follow)
@@ -78,31 +78,35 @@ defmodule GroupherServer.Accounts.Delegate.Fans do
7878
end
7979

8080
# update follow in user meta
81-
defpupdate_follow_meta(%User{}=target_user,user_id,opt)do
81+
defpupdate_user_follow_info(%User{}=target_user,user_id,opt)do
8282
with{:ok,user}<-ORM.find(User,user_id)do
8383
target_user_meta=ensure(target_user.meta,@default_user_meta)
8484
user_meta=ensure(user.meta,@default_user_meta)
8585

86+
follower_user_ids=
87+
caseoptdo
88+
:add->(target_user_meta.follower_user_ids++[user_id])|>Enum.uniq()
89+
:remove->(target_user_meta.follower_user_ids--[user_id])|>Enum.uniq()
90+
end
91+
92+
following_user_ids=
93+
caseoptdo
94+
:add->(user_meta.following_user_ids++[target_user.id])|>Enum.uniq()
95+
:remove->(user_meta.following_user_ids--[target_user.id])|>Enum.uniq()
96+
end
97+
8698
Multi.new()
8799
|>Multi.run(:update_follower_meta,fn_,_->
88-
follower_user_ids=
89-
caseoptdo
90-
:add->target_user_meta.follower_user_ids++[user_id]
91-
:remove->target_user_meta.follower_user_ids--[user_id]
92-
end
93-
100+
followers_count=length(follower_user_ids)
94101
meta=Map.merge(target_user_meta,%{follower_user_ids:follower_user_ids})
95-
ORM.update_meta(target_user,meta)
102+
103+
ORM.update_meta(target_user,meta,changes:%{followers_count:followers_count})
96104
end)
97105
|>Multi.run(:update_following_meta,fn_,_->
98-
following_user_ids=
99-
caseoptdo
100-
:add->user_meta.following_user_ids++[target_user.id]
101-
:remove->user_meta.following_user_ids--[target_user.id]
102-
end
103-
106+
followings_count=length(following_user_ids)
104107
meta=Map.merge(user_meta,%{following_user_ids:following_user_ids})
105-
ORM.update_meta(user,meta)
108+
109+
ORM.update_meta(user,meta,changes:%{followings_count:followings_count})
106110
end)
107111
|>Repo.transaction()
108112
|>result()

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

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ defmodule GroupherServer.Accounts.Helper.Loader do
77
aliasHelper.QueryBuilder
88
aliasGroupherServer.{Accounts,CMS,Repo}
99

10-
aliasAccounts.{UserFollower,UserFollowing}
11-
1210
defdata,do:Dataloader.Ecto.new(Repo,query:&query/2)
1311

1412
defquery({"communities_subscribers",CMS.CommunitySubscriber},%{count:_})do
@@ -24,23 +22,6 @@ defmodule GroupherServer.Accounts.Helper.Loader do
2422
|>select([u,c],c)
2523
end
2624

27-
# TODO: fix later, this is not working
28-
defquery({"users_followers",UserFollower},%{count:_})do
29-
UserFollower
30-
|>group_by([f],f.user_id)
31-
|>select([f],count(f.follower_id))
32-
end
33-
34-
defquery({"users_followings",UserFollowing},%{count:_})do
35-
UserFollowing
36-
|>group_by([f],f.user_id)
37-
|>select([f],count(f.id))
38-
end
39-
40-
defquery({"users_followers",UserFollower},%{viewer_did:_,cur_user:cur_user})do
41-
UserFollower|>where([f],f.follower_id==^cur_user.id)
42-
end
43-
4425
defquery(queryable,_args),do:queryable
4526

4627
defpcount_contents(queryable)do

‎lib/groupher_server/accounts/user.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ defmodule GroupherServer.Accounts.User do
6868
# Ta 关注了你
6969
field(:viewer_been_followed,:boolean,default:false,virtual:true)
7070

71+
field(:followings_count,:integer,default:0)
72+
field(:followers_count,:integer,default:0)
73+
7174
embeds_one(:meta,Embeds.UserMeta,on_replace::update)
7275
embeds_one(:contributes,Embeds.UserContribute,on_replace::update)
7376

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

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,20 +93,10 @@ defmodule GroupherServerWeb.Schema.Account.Types do
9393
end
9494

9595
@desc"get follower users count"
96-
field:followers_count,:integerdo
97-
arg(:count,:count_type,default_value::count)
98-
99-
resolve(dataloader(Accounts,:followers))
100-
middleware(M.ConvertToInt)
101-
end
96+
field(:followers_count,:integer)
10297

10398
@desc"get following users count"
104-
field:followings_count,:integerdo
105-
arg(:count,:count_type,default_value::count)
106-
107-
resolve(dataloader(Accounts,:followings))
108-
middleware(M.ConvertToInt)
109-
end
99+
field(:followings_count,:integer)
110100

111101
@desc"if viewer has followed"
112102
field(:viewer_has_followed,:boolean)

‎lib/helper/orm.ex‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,15 @@ defmodule Helper.ORM do
265265
@doc"""
266266
update meta info for article / comment
267267
"""
268+
defupdate_meta(queryable,meta,changes:changes)whenis_map(changes)do
269+
meta=meta|>strip_struct
270+
271+
queryable
272+
|>Ecto.Changeset.change(changes)
273+
|>Ecto.Changeset.put_embed(:meta,meta)
274+
|>Repo.update()
275+
end
276+
268277
defupdate_meta(queryable,meta)do
269278
meta=meta|>strip_struct
270279

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
defmoduleGroupherServer.Repo.Migrations.MoveFollowCountToUsersdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
altertable(:users)do
6+
add(:followings_count,:integer)
7+
add(:followers_count,:integer)
8+
end
9+
end
10+
end

‎test/groupher_server/accounts/fans_test.exs‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ defmodule GroupherServer.Test.Accounts.Fans do
2222
assertfound|>Map.get(:followers)|>length==1
2323
end
2424

25-
@tag:wip
25+
@tag:wip2
2626
test"follow user should update follow meta info",~m(user)ado
2727
{:ok,user2}=db_insert(:user)
2828

@@ -31,6 +31,9 @@ defmodule GroupherServer.Test.Accounts.Fans do
3131
{:ok,user}=ORM.find(User,user.id)
3232
{:ok,user2}=ORM.find(User,user2.id)
3333

34+
assertuser.followings_count==1
35+
assertuser2.followers_count==1
36+
3437
assertuser2.idinuser.meta.following_user_ids
3538
assertuser.idinuser2.meta.follower_user_ids
3639
end
@@ -73,6 +76,7 @@ defmodule GroupherServer.Test.Accounts.Fans do
7376
assertfound|>Map.get(:followers)|>length==0
7477
end
7578

79+
@tag:wip2
7680
test"undo follow user should update follow meta info",~m(user)ado
7781
{:ok,user2}=db_insert(:user)
7882

@@ -89,6 +93,9 @@ defmodule GroupherServer.Test.Accounts.Fans do
8993
{:ok,user}=ORM.find(User,user.id)
9094
{:ok,user2}=ORM.find(User,user2.id)
9195

96+
assertuser.followings_count==0
97+
assertuser2.followers_count==0
98+
9299
assertuser2.idnot inuser.meta.following_user_ids
93100
assertuser.idnot inuser2.meta.follower_user_ids
94101
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp