Browse Source

ユーザ作成時に IP アドレス連携するやぅに (#323) (#326)

Merge branch 'main' into feature/323

Merge branch 'main' into feature/323

Merge branch 'main' into feature/323

#323

#323

Co-authored-by: miteruzo <miteruzo@naver.com>
Reviewed-on: https://git.miteruzo.com/miteruzo/btrc-hub/pulls/326
feature/329
みてるぞ 1 week ago
parent
commit
b2c3e02ccc
2 changed files with 26 additions and 10 deletions
  1. +24
    -7
      backend/app/controllers/users_controller.rb
  2. +2
    -3
      backend/spec/requests/users_spec.rb

+ 24
- 7
backend/app/controllers/users_controller.rb View File

@@ -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

+ 2
- 3
backend/spec/requests/users_spec.rb View File

@@ -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")



Loading…
Cancel
Save