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.

Commit35dbb03

Browse files
committed
update user
1 parent0472ab3 commit35dbb03

File tree

9 files changed

+159
-5
lines changed

9 files changed

+159
-5
lines changed

‎lib/mastani_server/accounts/accounts.ex‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ defmodule MastaniServer.Accounts do
1111

1212
@default_subscribed_communitiesget_config(:general,:default_subscribed_communities)
1313

14+
defupdate_profile(%User{id:id},attrs\\%{})do
15+
with{:ok,user}<-ORM.find(User,id)do
16+
caseuser.id===iddo
17+
true->user|>ORM.update(attrs)
18+
false->{:error,"Error: not qualified"}
19+
end
20+
end
21+
end
1422
@doc"""
1523
github_signin steps:
1624
------------------

‎lib/mastani_server/accounts/user.ex‎

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ defmodule MastaniServer.Accounts.User do
99
field(:avatar,:string)
1010
field(:sex,:string)
1111
field(:bio,:string)
12+
field(:email,:string)
13+
field(:location,:string)
14+
field(:education,:string)
15+
field(:company,:string)
16+
field(:qq,:string)
17+
field(:weibo,:string)
18+
field(:weichat,:string)
1219
field(:from_github,:boolean)
1320
has_one(:github_profile,GithubUser)
1421

@@ -22,8 +29,8 @@ defmodule MastaniServer.Accounts.User do
2229
timestamps(type::utc_datetime)
2330
end
2431

25-
@optional_fields~w(nickname bio avatar sex)a
2632
@required_fields~w(nickname avatar)a
33+
@optional_fields~w(nickname bio avatar sex location email company education qq weichat weibo)a
2734

2835
@docfalse
2936
defchangeset(%User{}=user,attrs)do
@@ -33,7 +40,15 @@ defmodule MastaniServer.Accounts.User do
3340
user
3441
|>cast(attrs,@optional_fields++@required_fields)
3542
|>validate_required(@required_fields)
36-
|>validate_length(:nickname,max:30)
43+
|>validate_length(:nickname,min:3,max:30)
44+
|>validate_length(:bio,min:3,max:100)
45+
|>validate_inclusion(:sex,["dude","girl"])
46+
|>validate_format(:email,~r/@/)
47+
|>validate_length(:location,min:2,max:30)
48+
|>validate_length(:company,min:3,max:30)
49+
|>validate_length(:qq,min:8,max:15)
50+
|>validate_length(:weichat,min:3,max:30)
51+
|>validate_length(:weibo,min:3,max:30)
3752

3853
# |> unique_constraint(:username)
3954
end

‎lib/mastani_server_web/resolvers/accounts_resolver.ex‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ defmodule MastaniServerWeb.Resolvers.Accounts do
99
defaccount(_root,_args,%{context:%{cur_user:cur_user}}),
1010
do:Accounts.User|>ORM.find(cur_user.id)
1111

12+
defupdate_profile(_root,%{profile:profile},%{context:%{cur_user:cur_user}})do
13+
IO.inspect(profile,label:"update_profile")
14+
Accounts.update_profile(%Accounts.User{id:cur_user.id},profile)
15+
end
16+
1217
defgithub_signin(_root,%{github_user:github_user},_info)do
1318
Accounts.github_signin(github_user)
1419
end

‎lib/mastani_server_web/schema/account/account_misc.ex‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,17 @@ defmodule MastaniServerWeb.Schema.Account.Misc do
1818
field(:public_repos,:integer)
1919
field(:public_gists,:integer)
2020
end
21+
22+
input_object:user_profile_inputdo
23+
field(:nickname,:string)
24+
field(:bio,:string)
25+
field(:sex,:string)
26+
field(:education,:string)
27+
field(:location,:string)
28+
field(:company,:string)
29+
field(:email,:string)
30+
field(:qq,:string)
31+
field(:weibo,:string)
32+
field(:weichat,:string)
33+
end
2134
end

‎lib/mastani_server_web/schema/account/account_mutations.ex‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule MastaniServerWeb.Schema.Account.Mutations do
33
useAbsinthe.Ecto,repo:MastaniServerWeb.Repo
44

55
aliasMastaniServerWeb.Resolvers
6-
aliasMastaniServerWeb.Middleware
6+
aliasMastaniServerWeb.Middleware,as:M
77

88
object:account_mutationsdo
99
# @desc "hehehef: create a user"
@@ -16,11 +16,19 @@ defmodule MastaniServerWeb.Schema.Account.Mutations do
1616
# resolve(&Resolvers.Accounts.create_user/3)
1717
# end
1818

19+
@desc"update user's profile"
20+
field:update_profile,:userdo
21+
arg(:profile,non_null(:user_profile_input))
22+
middleware(M.Authorize,:login)
23+
24+
resolve(&Resolvers.Accounts.update_profile/3)
25+
end
26+
1927
field:github_signin,:token_infodo
2028
arg(:code,non_null(:string))
2129
# arg(:profile, non_null(:github_profile_input))
2230

23-
middleware(Middleware.GithubUser)
31+
middleware(M.GithubUser)
2432
resolve(&Resolvers.Accounts.github_signin/3)
2533
end
2634
end

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,16 @@ defmodule MastaniServerWeb.Schema.Account.Types do
3636
object:userdo
3737
field(:id,:id)
3838
field(:nickname,:string)
39-
field(:bio,:string)
4039
field(:avatar,:string)
40+
field(:bio,:string)
41+
field(:sex,:string)
42+
field(:email,:string)
43+
field(:location,:string)
44+
field(:education,:string)
45+
field(:company,:string)
46+
field(:qq,:string)
47+
field(:weibo,:string)
48+
field(:weichat,:string)
4149
field(:inserted_at,:datetime)
4250
field(:updated_at,:datetime)
4351
field(:from_github,:boolean)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
defmoduleMastaniServer.Repo.Migrations.AddMoreAttrsToUserdo
2+
useEcto.Migration
3+
4+
defchangedo
5+
altertable(:users)do
6+
add(:location,:string)
7+
add(:email,:string)
8+
add(:company,:string)
9+
add(:education,:string)
10+
add(:qq,:string)
11+
add(:weichat,:string)
12+
add(:weibo,:string)
13+
end
14+
end
15+
end

‎test/mastani_server/accounts/accounts_test.exs‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,37 @@ defmodule MastaniServer.Test.AccountsTest do
1111
# @valid_user mock_attrs(:user)
1212
@valid_github_profilemock_attrs(:github_profile)|>map_key_stringify
1313

14+
describe"[update user]"do
15+
test"update user with valid attrs"do
16+
{:ok,user}=db_insert(:user)
17+
# IO.inspect user, label: "update user"
18+
attrs=%{
19+
nickname:"new nickname",
20+
sex:"dude",
21+
bio:"new bio",
22+
email:"new@qq.com",
23+
company:"at home",
24+
qq:"8384384483",
25+
weibo:"8384",
26+
weichat:"8384",
27+
}
28+
{:ok,updated}=Accounts.update_profile(%Accounts.User{id:user.id},attrs)
29+
30+
assertupdated.bio==attrs.bio
31+
assertupdated.nickname==attrs.nickname
32+
assertupdated.sex==attrs.sex
33+
end
34+
35+
test"update user with invalid attrs fails"do
36+
{:ok,user}=db_insert(:user)
37+
38+
assert{:error,_}=Accounts.update_profile(%Accounts.User{id:user.id},%{qq:"123"})
39+
assert{:error,_}=Accounts.update_profile(%Accounts.User{id:user.id},%{sex:"other"})
40+
assert{:error,_}=Accounts.update_profile(%Accounts.User{id:user.id},%{email:"other"})
41+
# ...TODO
42+
end
43+
end
44+
1445
describe"[github login]"do
1546
test"register a valid github user with non-exist in db"do
1647
assert{:error,_}=
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
defmoduleMastaniServer.Test.Mutation.AccountTestdo
2+
useMastaniServerWeb.ConnCase,async:true
3+
4+
importMastaniServer.Factory
5+
importMastaniServer.Test.ConnSimulator
6+
importMastaniServer.Test.AssertHelper
7+
importShortMaps
8+
9+
# alias MastaniServer.{Accounts}
10+
# alias Helper.ORM
11+
12+
setupdo
13+
{:ok,user}=db_insert(:user)
14+
15+
user_conn=simu_conn(:user)
16+
guest_conn=simu_conn(:guest)
17+
18+
{:ok,~m(user_conn guest_conn user)a}
19+
end
20+
21+
describe"[account update]"do
22+
@update_query"""
23+
mutation($profile: UserProfileInput!) {
24+
updateProfile(profile: $profile) {
25+
id
26+
nickname
27+
}
28+
}
29+
"""
30+
test"user can update it's own profile",~m(user)ado
31+
ownd_conn=simu_conn(:user,user)
32+
variables=%{
33+
profile:%{
34+
nickname:"new nickname"
35+
}
36+
}
37+
updated=ownd_conn|>mutation_result(@update_query,variables,"updateProfile")
38+
39+
assertupdated["nickname"]=="new nickname"
40+
end
41+
42+
test"user's profile can not updated by guest",~m(guest_conn)ado
43+
variables=%{
44+
profile:%{
45+
nickname:"new nickname"
46+
}
47+
}
48+
assertguest_conn|>mutation_get_error?(@update_query,variables)
49+
end
50+
end
51+
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp