Skip to content

Commit 022d95d

Browse files
committed
Endpoint for updating user info
1 parent 4262e00 commit 022d95d

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

app/controllers/api/v8/users_controller.rb

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,25 @@ def create
119119
end
120120
end
121121

122+
def update
123+
unauthorize_guest! if current_user.guest?
124+
125+
user = current_user
126+
user = User.find_by!(id: params[:id]) unless params[:id] == 'current'
127+
authorize! :update, user
128+
set_user_fields
129+
set_extra_data
130+
if @user.save
131+
render json: {
132+
message: 'User created.'
133+
}
134+
else
135+
render json: {
136+
errors: @user.errors
137+
}, status: :bad_request
138+
end
139+
end
140+
122141
private
123142

124143
def set_email
@@ -163,7 +182,8 @@ def set_extra_data
163182
namespace = extra_fields['namespace']
164183
raise 'Namespace not defined' unless namespace
165184
extra_fields['data'].each do |key, value|
166-
@user.user_app_data.new(namespace: namespace, field_name: key, value: value)
185+
datum = @user.user_app_data.find_or_initialize_by(namespace: namespace, field_name: key)
186+
datum.value = value
167187
end
168188
end
169189
end

app/models/ability.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ def initialize(user)
4141
can :destroy, User do |u|
4242
u == user
4343
end
44+
cannot :update, User
45+
can :update, User do |u|
46+
u == user
47+
end
4448

4549
cannot :read, Course
4650
can :read, Course do |c|

config/routes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
namespace :v8, defaults: {format: 'json'} do
4343
resources :apidocs, only: :index, path: 'documentation'
4444

45-
resources :users, only: [:show, :create]
45+
resources :users, only: [:show, :create, :update]
4646

4747
namespace :users do
4848
resources :password_reset, only: [:create]

0 commit comments

Comments
 (0)