78 lines
1.5 KiB
Ruby
78 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class GuestsController < ApplicationController
|
|
def new
|
|
respond_to :html
|
|
|
|
@guest = Guest.new
|
|
end
|
|
|
|
def create
|
|
respond_to :html
|
|
|
|
@guest = Guest.new(guest_params)
|
|
unless ENV['RECAPTCHA_SECRET_KEY'].blank? || verify_recaptcha(model: @guest)
|
|
render :new
|
|
return
|
|
end
|
|
|
|
if @guest.save
|
|
redirect_to guest_path(@guest)
|
|
else
|
|
existing_guest = Guest.find_by(email: guest_params[:email])
|
|
if existing_guest
|
|
@guest = existing_guest
|
|
GuestMailer.welcome_back_email(@guest).deliver_now
|
|
render :new_exists
|
|
else
|
|
render :new
|
|
end
|
|
end
|
|
end
|
|
|
|
def show
|
|
respond_to :html
|
|
|
|
@guest = Guest.find_by_id_token(params[:id])
|
|
end
|
|
|
|
def update
|
|
@guest = Guest.find_by_id_token(params[:id])
|
|
|
|
if @guest.update(guest_params)
|
|
if @guest.attending?
|
|
redirect_to guest_plus_ones_path(@guest)
|
|
else
|
|
redirect_to confirm_guest_path(@guest)
|
|
end
|
|
else
|
|
render :show
|
|
end
|
|
end
|
|
|
|
def confirm
|
|
respond_to :html
|
|
|
|
@guest = Guest.find_by_id_token(params[:id])
|
|
end
|
|
|
|
def complete
|
|
respond_to :html
|
|
|
|
@guest = Guest.find_by_id_token(params[:id])
|
|
Guest.transaction do
|
|
@guest.update!(guest_params)
|
|
@guest.touch :confirmed_at
|
|
end
|
|
GuestMailer.confirmation_email(@guest).deliver_now
|
|
end
|
|
|
|
private
|
|
|
|
def guest_params
|
|
params.require(:guest).permit(
|
|
:email, :first_name, :last_name, :attending, :diet, :songs, :notes
|
|
)
|
|
end
|
|
end
|