From b2c3e02cccd96c94af33a7629df696a57d8ac296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BF=E3=81=A6=E3=82=8B=E3=81=9E?= Date: Sat, 25 Apr 2026 21:00:22 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E6=99=82=E3=81=AB=20IP=20=E3=82=A2=E3=83=89=E3=83=AC=E3=82=B9?= =?UTF-8?q?=E9=80=A3=E6=90=BA=E3=81=99=E3=82=8B=E3=82=84=E3=81=85=E3=81=AB?= =?UTF-8?q?=20(#323)=20(#326)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge branch 'main' into feature/323 Merge branch 'main' into feature/323 Merge branch 'main' into feature/323 #323 #323 Co-authored-by: miteruzo Reviewed-on: https://git.miteruzo.com/miteruzo/btrc-hub/pulls/326 --- backend/app/controllers/users_controller.rb | 31 ++++++++++++++++----- backend/spec/requests/users_spec.rb | 5 ++-- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/backend/app/controllers/users_controller.rb b/backend/app/controllers/users_controller.rb index 4d8e57e..64aa43c 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.create_or_find_by!(ip_address: ip_bin) + + UserIp.create_or_find_by!(user:, ip_address:) + end end diff --git a/backend/spec/requests/users_spec.rb b/backend/spec/requests/users_spec.rb index 89003a4..1f28e95 100644 --- a/backend/spec/requests/users_spec.rb +++ b/backend/spec/requests/users_spec.rb @@ -1,11 +1,10 @@ require "rails_helper" - RSpec.describe "Users", type: :request do describe "POST /users" do it "creates guest user and returns code" do post "/users" - expect(response).to have_http_status(:ok) + expect(response).to have_http_status(:created) expect(json["code"]).to be_present expect(json["user"]["role"]).to eq("guest") end @@ -38,7 +37,7 @@ RSpec.describe "Users", type: :request do sign_in_as(user) put "/users/#{user.id}", params: { name: "new-name" } - expect(response).to have_http_status(:created) + expect(response).to have_http_status(:ok) expect(json["id"]).to eq(user.id) expect(json["name"]).to eq("new-name")