Compare commits

..

4 Commits

Author SHA1 Message Date
みてるぞ bce04488ed #318 2026-04-23 00:05:27 +09:00
みてるぞ c9df340978 #318 2026-04-22 23:40:00 +09:00
みてるぞ 3da9b447d4 #318 2026-04-22 23:32:05 +09:00
みてるぞ 6b0d262040 #318 2026-04-22 02:06:15 +09:00
2 changed files with 10 additions and 26 deletions
+7 -24
View File
@@ -1,26 +1,18 @@
class UsersController < ApplicationController
def create
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
user = User.create!(inheritance_code: SecureRandom.uuid, role: 'guest')
render json: { code: user.inheritance_code,
user: user.slice(:id, :name, :inheritance_code, :role) },
status: :created
user: user.slice(:id, :name, :inheritance_code, :role) }
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
return head :unprocessable_entity if request.remote_ip.blank?
attach_ip_address!(user)
UserIp.find_or_create_by!(user:, ip_address:)
render json: { valid: true, user: user.slice(:id, :name, :inheritance_code, :role) }
end
@@ -49,18 +41,9 @@ class UsersController < ApplicationController
return head :bad_request if name.blank?
if user.update(name:)
render json: user.slice(:id, :name, :inheritance_code, :role), status: :ok
render json: user.slice(:id, :name, :inheritance_code, :role), status: :created
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
+3 -2
View File
@@ -1,10 +1,11 @@
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(:created)
expect(response).to have_http_status(:ok)
expect(json["code"]).to be_present
expect(json["user"]["role"]).to eq("guest")
end
@@ -37,7 +38,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(:ok)
expect(response).to have_http_status(:created)
expect(json["id"]).to eq(user.id)
expect(json["name"]).to eq("new-name")