Files
project-work/worker-toolkit-flaredown/repo/backend/app/models/registration.rb

78 lines
2.0 KiB
Ruby

class Registration
include ActiveModel::Validations
include ActiveModel::Serialization
attr_accessor :user, :errors, :captcha_response, :screen_name, :birth_date
validates :captcha_response, :screen_name, presence: true
validate :captcha_response_verified
def initialize(params)
@user_params = permitted(params).to_hash
@screen_name = @user_params.delete("screen_name")
@birth_date = @user_params.delete("birth_date")
@captcha_response = @user_params.delete("captcha_response")
@errors = ActiveModel::Errors.new(self)
end
def save!
# FIXME
# rubocop:disable Style/SignalException
fail ActiveRecord::RecordInvalid, self unless valid?
# rubocop:enable Style/SignalException
begin
@user = User.create!(@user_params)
profile = @user.profile
profile.birth_date = birth_date
profile.screen_name = screen_name if screen_name.present?
profile.save!
rescue ActiveRecord::RecordInvalid => e
self.errors = e.record.errors
raise ActiveRecord::RecordInvalid, self
end
self
end
def self.create!(params)
new(params).save!
end
def self.delete!(params)
email = params[:email]
user = User.find_by(email: email)
return if user.blank?
ActiveRecord::Base.transaction do
user.profile.destroy!
user.checkins.or({:postal_code.ne => nil}, :position_id.ne => nil)
&.update_all(postal_code: nil, position_id: nil)
user.destroy!
Feedback.create!(email: email, delete_reason: params[:delete_reason])
end
end
# Use AR's i18n scope so that we can raise RecordInvalid exceptions
def self.i18n_scope
:activerecord
end
private
def permitted(params)
params.require(:registration).permit(
:email, :password, :password_confirmation, :screen_name, :captcha_response, :birth_date
)
end
def captcha_response_verified
verified = ::Google::RecaptchaVerifier.exec(captcha_response)
errors.add(:captcha_response, "verification failed or response expired") unless verified
end
end