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.

Commitbb6055d

Browse files
committed
refactor(user): follow states for paged api
1 parent2953902 commitbb6055d

File tree

5 files changed

+64
-22
lines changed

5 files changed

+64
-22
lines changed

‎lib/groupher_server/accounts/accounts.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ defmodule GroupherServer.Accounts do
1717
# profile
1818
defdelegateread_user(user),to:Profile
1919
defdelegateread_user(login,user),to:Profile
20+
defdelegatepaged_users(filter),to:Profile
21+
defdelegatepaged_users(filter,user),to:Profile
22+
2023
defdelegateupdate_profile(user,attrs),to:Profile
2124
defdelegateupdate_geo(user,remote_ip),to:Profile
2225
defdelegategithub_signin(github_user),to:Profile

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

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,11 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
1111
aliasAccounts.{Achievement,GithubUser,User,Social}
1212
aliasHelper.{Guardian,ORM,QueryBuilder,RadarSearch}
1313

14+
aliasGroupherServer.Accounts.Delegate.Fans
1415
aliasEcto.Multi
1516

1617
@default_subscribed_communitiesget_config(:general,:default_subscribed_communities)
1718

18-
defread_user(%User{}=user)do
19-
with{:ok,user}<-ORM.read(User,user.id,inc::views)do
20-
caseuser.contributesdo
21-
nil->assign_default_contributes(user)
22-
_->{:ok,user}
23-
end
24-
end
25-
end
26-
2719
defread_user(login)whenis_binary(login)do
2820
with{:ok,user}<-ORM.read_by(User,%{login:login},inc::views)do
2921
caseuser.contributesdo
@@ -52,18 +44,19 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
5244
end
5345
end
5446

55-
defpassign_default_contributes(%User{}=user)do
56-
{:ok,contributes}=Statistics.list_contributes_digest(%User{id:user.id})
57-
ORM.update_embed(user,:contributes,contributes)
47+
defpaged_users(filter,%User{}=user)do
48+
ORM.find_all(User,filter)|>Fans.mark_viewer_follow_status(user)|>done
49+
end
50+
51+
defpaged_users(filter)do
52+
ORM.find_all(User,filter)
5853
end
5954

6055
@doc"""
6156
update user's profile
6257
"""
6358
defupdate_profile(%User{}=user,attrs\\%{})do
64-
changeset=
65-
user
66-
|>Ecto.Changeset.change(attrs)
59+
changeset=user|>Ecto.Changeset.change(attrs)
6760

6861
changeset
6962
|>update_social_ifneed(user,attrs)
@@ -299,4 +292,10 @@ defmodule GroupherServer.Accounts.Delegate.Profile do
299292
changeset
300293
end
301294
end
295+
296+
# assign default contributes
297+
defpassign_default_contributes(%User{}=user)do
298+
{:ok,contributes}=Statistics.list_contributes_digest(%User{id:user.id})
299+
ORM.update_embed(user,:contributes,contributes)
300+
end
302301
end

‎lib/groupher_server_web/resolvers/accounts_resolver.ex‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ defmodule GroupherServerWeb.Resolvers.Accounts do
88
aliasGroupherServer.{Accounts,CMS}
99

1010
aliasAccounts.{MentionMail,NotificationMail,SysNotificationMail,User}
11-
aliasHelper.{Certification,ORM}
11+
aliasHelper.Certification
1212

1313
# def user(_root, %{id: id}, _info), do: User |> ORM.read(id, inc: :views)
1414

@@ -22,7 +22,13 @@ defmodule GroupherServerWeb.Resolvers.Accounts do
2222
{:error,[message:"need user login name",code:ecode(:account_login)]}
2323
end
2424

25-
defpaged_users(_root,~m(filter)a,_info),do:User|>ORM.find_all(filter)
25+
defpaged_users(_root,~m(filter)a,%{context:%{cur_user:cur_user}})do
26+
Accounts.paged_users(filter,cur_user)
27+
end
28+
29+
defpaged_users(_root,~m(filter)a,_info)do
30+
Accounts.paged_users(filter)
31+
end
2632

2733
defsession_state(_root,_args,%{context:%{cur_user:cur_user,remote_ip:remote_ip}})do
2834
# 1. store remote_ip

‎test/groupher_server_web/query/accounts/account_test.exs‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ defmodule GroupherServer.Test.Query.Account.Basic do
143143
id
144144
nickname
145145
bio
146+
viewerHasFollowed
147+
viewerBeenFollowed
146148
}
147149
totalPages
148150
totalCount
@@ -157,6 +159,28 @@ defmodule GroupherServer.Test.Query.Account.Basic do
157159
results=guest_conn|>query_result(@query,variables,"pagedUsers")
158160
assertresults|>is_valid_pagination?()
159161
end
162+
163+
@tag:wip2
164+
test"login user can get paged users with follow state info",~m(user_conn user)ado
165+
variables=%{filter:%{page:1,size:10}}
166+
167+
{:ok,user2}=db_insert(:user)
168+
{:ok,user3}=db_insert(:user)
169+
170+
{:ok,_}=Accounts.follow(user,user2)
171+
{:ok,_}=Accounts.follow(user3,user)
172+
173+
results=user_conn|>query_result(@query,variables,"pagedUsers")
174+
assertresults|>is_valid_pagination?()
175+
176+
entries=results["entries"]
177+
178+
user3=Enum.find(entries,&(&1["id"]==to_string(user3.id)))
179+
assertuser3["viewerBeenFollowed"]
180+
181+
user2=Enum.find(entries,&(&1["id"]==to_string(user2.id)))
182+
assertuser2["viewerHasFollowed"]
183+
end
160184
end
161185

162186
describe"[account passport] test"do

‎test/groupher_server_web/query/accounts/fans_test.exs‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ defmodule GroupherServer.Test.Query.Account.Fans do
2424
}
2525
}
2626
"""
27-
@tag:wip2
2827
test"login user can get basic paged followers info",~m(user)ado
2928
variables=%{login:user.login,filter:%{page:1,size:20}}
3029

@@ -62,29 +61,40 @@ defmodule GroupherServer.Test.Query.Account.Fans do
6261
end
6362

6463
@query"""
65-
query($userId: ID, $filter: PagedFilter!) {
66-
pagedFollowings(userId: $userId, filter: $filter) {
64+
query($login: String!, $filter: PagedFilter!) {
65+
pagedFollowings(login: $login, filter: $filter) {
6766
entries {
6867
id
68+
viewerHasFollowed
6969
}
7070
totalCount
7171
}
7272
}
7373
"""
74+
@tag:wip2
7475
test"login user can get it's own paged followings",~m(user_conn user)ado
75-
variables=%{filter:%{page:1,size:20}}
76+
variables=%{login:user.login,filter:%{page:1,size:20}}
7677

7778
{:ok,user2}=db_insert(:user)
7879
{:ok,user3}=db_insert(:user)
7980
{:ok,user4}=db_insert(:user)
81+
8082
{:ok,_followeer}=user|>Accounts.follow(user2)
8183
{:ok,_followeer}=user|>Accounts.follow(user3)
8284
{:ok,_followeer}=user|>Accounts.follow(user4)
8385

8486
results=user_conn|>query_result(@query,variables,"pagedFollowings")
8587

8688
assertresults|>Map.get("totalCount")==3
87-
assertresults["entries"]|>Enum.any?(&(&1["id"]==to_string(user2.id)))
89+
90+
entries=results|>Map.get("entries")
91+
92+
assertentries|>List.first()|>Map.get("viewerHasFollowed")
93+
assertentries|>List.last()|>Map.get("viewerHasFollowed")
94+
95+
assertuser2|>exist_in?(entries,:string_key)
96+
assertuser3|>exist_in?(entries,:string_key)
97+
assertuser4|>exist_in?(entries,:string_key)
8898
end
8999

90100
test"login user can get other user's paged followings",~m(guest_conn user)ado

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp