|
|
|
@@ -1,18 +1,26 @@ |
|
|
|
class UsersController < ApplicationController |
|
|
|
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, |
|
|
|
user: user.slice(:id, :name, :inheritance_code, :role) } |
|
|
|
user: user.slice(:id, :name, :inheritance_code, :role) }, |
|
|
|
status: :created |
|
|
|
end |
|
|
|
|
|
|
|
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]) |
|
|
|
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) } |
|
|
|
end |
|
|
|
@@ -41,9 +49,18 @@ class UsersController < ApplicationController |
|
|
|
return head :bad_request if name.blank? |
|
|
|
|
|
|
|
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 |
|
|
|
render json: user.errors, status: :unprocessable_entity |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
private |
|
|
|
|
|
|
|
def attach_ip_address! user |
|
|
|
ip_bin = IPAddr.new(request.remote_ip).hton |
|
|
|
ip_address = IpAddress.create_or_find_by!(ip_address: ip_bin) |
|
|
|
|
|
|
|
UserIp.create_or_find_by!(user:, ip_address:) |
|
|
|
end |
|
|
|
end |