Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1413a918d0 | |||
| c112576b11 | |||
| b5e4ee67d8 | |||
| ca4e864596 | |||
| 2cfe9fdc55 | |||
| 63dcc9b266 |
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user