@@ -76,6 +76,32 @@ class UsersController < Api::V8::BaseController
7676 end
7777 end
7878
79+ swagger_path '/api/v8/users/get_user_with_email?email={email}' do
80+ operation :get do
81+ key :description , "Returns the user's id as upstream_id, user's courses.mooc.fi-id as id, email, first name and last name by user email"
82+ key :operationId , 'getUserInformationByEmail'
83+ key :produces , [ 'application/json' ]
84+ key :tags , [ 'user' ]
85+ parameter '$ref' : '#/parameters/user_email'
86+ response 403 , '$ref' : '#/responses/error'
87+ response 404 , '$ref' : '#/responses/error'
88+ response 200 do
89+ key :description , "User's courses.mooc.fi-id as id, email, first name, last name and id as upstream_id as json"
90+ key :content , 'application/json'
91+ schema do
92+ key :title , :user
93+ key :required , [ :user ]
94+ key :type , :object
95+ property :id , type : :string , description : "User's courses.mooc.fi user id" , example : 'ABCD1234-5678-EFGH-IJ90-ABC123DEF456'
96+ property :email , type : :string , description : 'User email' , example : 'user@example.com'
97+ property :first_name , type : :string , description : 'User first name' , example : 'John'
98+ property :last_name , type : :string , description : 'User last name' , example : 'Doe'
99+ property :upstream_id , type : :integer , description : "User's user id in TMC database" , example : 123
100+ end
101+ end
102+ end
103+ end
104+
79105 skip_authorization_check only : %i[ set_password_managed_by_courses_mooc_fi ]
80106
81107 def show
@@ -125,19 +151,13 @@ def create
125151 set_extra_data
126152
127153 if BannedEmail . banned? ( @user . email )
128- return render json : {
129- success : true ,
130- message : 'User created.'
131- }
154+ return render json : build_success_response ( params [ :include_id ] )
132155 end
133156
134157 if @user . errors . empty? && @user . save
135158 # TODO: Whitelist origins
136159 UserMailer . email_confirmation ( @user , params [ :origin ] , params [ :language ] ) . deliver_now
137- render json : {
138- success : true ,
139- message : 'User created.'
140- }
160+ render json : build_success_response ( params [ :include_id ] )
141161 else
142162 errors = @user . errors
143163 errors [ :username ] = errors . delete ( :login ) if errors . key? ( :login )
@@ -191,6 +211,24 @@ def set_password_managed_by_courses_mooc_fi
191211 } , status : :bad_request
192212 end
193213
214+ def get_user_with_email
215+ unauthorize_guest! if current_user . guest?
216+
217+ user = User . find_by! ( email : params [ :email ] )
218+ logger . info user
219+ authorize! :read , user
220+
221+ name = UserFieldValue . where ( user_id : user . id , field_name : [ 'first_name' , 'last_name' ] ) . pluck ( :field_name , :value ) . to_h
222+
223+ render json : {
224+ id : user . courses_mooc_fi_user_id ,
225+ email : user . email ,
226+ first_name : name [ 'first_name' ] ,
227+ last_name : name [ 'last_name' ] ,
228+ upstream_id : user . id ,
229+ }
230+ end
231+
194232 private
195233 def set_email
196234 user_params = params [ :user ]
@@ -275,6 +313,17 @@ def set_extra_data(eager_save = false)
275313 datum . save! if eager_save
276314 end
277315 end
316+
317+ def build_success_response ( include_id = false )
318+ response = {
319+ success : true ,
320+ message : 'User created.' ,
321+ }
322+ if include_id
323+ response [ :id ] = @user . id
324+ end
325+ response
326+ end
278327 end
279328 end
280329end
0 commit comments