This commit is contained in:
@@ -1,18 +1,26 @@
|
|||||||
class UsersController < ApplicationController
|
class UsersController < ApplicationController
|
||||||
def create
|
def create
|
||||||
user = User.create!(inheritance_code: SecureRandom.uuid, role: 'guest')
|
return head :unprocessable_entity if request.remote_ip.blank?
|
||||||
|
|
||||||
|
user = nil
|
||||||
|
|
||||||
|
User.transaction do
|
||||||
|
user = User.create!(inheritance_code: SecureRandom.uuid, role: :guest)
|
||||||
|
attach_ip_address!(user)
|
||||||
|
end
|
||||||
|
|
||||||
render json: { code: user.inheritance_code,
|
render json: { code: user.inheritance_code,
|
||||||
user: user.slice(:id, :name, :inheritance_code, :role) }
|
user: user.slice(:id, :name, :inheritance_code, :role) },
|
||||||
|
status: :created
|
||||||
end
|
end
|
||||||
|
|
||||||
def verify
|
def verify
|
||||||
ip_bin = IPAddr.new(request.remote_ip).hton
|
|
||||||
ip_address = IpAddress.find_or_create_by!(ip_address: ip_bin)
|
|
||||||
|
|
||||||
user = User.find_by(inheritance_code: params[:code])
|
user = User.find_by(inheritance_code: params[:code])
|
||||||
return render json: { valid: false } unless user
|
return render json: { valid: false } unless user
|
||||||
|
|
||||||
UserIp.find_or_create_by!(user:, ip_address:)
|
return head :unprocessable_entity if request.remote_ip.blank?
|
||||||
|
|
||||||
|
attach_ip_address!(user)
|
||||||
|
|
||||||
render json: { valid: true, user: user.slice(:id, :name, :inheritance_code, :role) }
|
render json: { valid: true, user: user.slice(:id, :name, :inheritance_code, :role) }
|
||||||
end
|
end
|
||||||
@@ -41,9 +49,18 @@ class UsersController < ApplicationController
|
|||||||
return head :bad_request if name.blank?
|
return head :bad_request if name.blank?
|
||||||
|
|
||||||
if user.update(name:)
|
if user.update(name:)
|
||||||
render json: user.slice(:id, :name, :inheritance_code, :role), status: :created
|
render json: user.slice(:id, :name, :inheritance_code, :role), status: :ok
|
||||||
else
|
else
|
||||||
render json: user.errors, status: :unprocessable_entity
|
render json: user.errors, status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def attach_ip_address! user
|
||||||
|
ip_bin = IPAddr.new(request.remote_ip).hton
|
||||||
|
ip_address = IpAddress.find_or_create_by!(ip_address: ip_bin)
|
||||||
|
|
||||||
|
UserIp.create_or_find_by!(user:, ip_address:)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user