From 63dcc9b266c76f3a45f40cb617240022386cdb1b Mon Sep 17 00:00:00 2001 From: miteruzo Date: Mon, 20 Apr 2026 12:47:34 +0900 Subject: [PATCH] #323 --- backend/app/controllers/users_controller.rb | 31 ++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/backend/app/controllers/users_controller.rb b/backend/app/controllers/users_controller.rb index 4d8e57e..3f2727f 100644 --- a/backend/app/controllers/users_controller.rb +++ b/backend/app/controllers/users_controller.rb @@ -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.find_or_create_by!(ip_address: ip_bin) + + UserIp.create_or_find_by!(user:, ip_address:) + end end