Why: Newsletter attribute `segment_recipient` is an integer to be used as enum. There's no advantage to store a number instead of an string if the ammount of elements in the table is not going to be huge, or we can take advantage of using an enum. Also maintaining both Newsletters enum paired with UserSegments::SEGMENTS would be a maintenance burden. How: * Migration to change segment_recipient column from integer to string * Removing enumeration from Newsletter model class * Using UserSegments::SEGMENTS instead of Newsletter.segment_recipients or integer values
62 lines
1.3 KiB
Ruby
62 lines
1.3 KiB
Ruby
class Admin::NewslettersController < Admin::BaseController
|
|
|
|
def index
|
|
@newsletters = Newsletter.all
|
|
end
|
|
|
|
def show
|
|
@newsletter = Newsletter.find(params[:id])
|
|
end
|
|
|
|
def new
|
|
@newsletter = Newsletter.new
|
|
end
|
|
|
|
def create
|
|
@newsletter = Newsletter.new(newsletter_params)
|
|
|
|
if @newsletter.save
|
|
notice = t("admin.newsletters.create_success")
|
|
redirect_to [:admin, @newsletter], notice: notice
|
|
else
|
|
render :new
|
|
end
|
|
end
|
|
|
|
def edit
|
|
@newsletter = Newsletter.find(params[:id])
|
|
end
|
|
|
|
def update
|
|
@newsletter = Newsletter.find(params[:id])
|
|
|
|
if @newsletter.update(newsletter_params)
|
|
redirect_to [:admin, @newsletter], notice: t("admin.newsletters.update_success")
|
|
else
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@newsletter = Newsletter.find(params[:id])
|
|
@newsletter.destroy
|
|
|
|
redirect_to admin_newsletters_path, notice: t("admin.newsletters.delete_success")
|
|
end
|
|
|
|
def deliver
|
|
@newsletter = Newsletter.find(params[:id])
|
|
Mailer.newsletter(@newsletter).deliver_later
|
|
|
|
@newsletter.update(sent_at: Time.current)
|
|
|
|
redirect_to [:admin, @newsletter], notice: t("admin.newsletters.send_success")
|
|
end
|
|
|
|
private
|
|
|
|
def newsletter_params
|
|
params.require(:newsletter).permit(:subject, :segment_recipient, :from, :body)
|
|
end
|
|
end
|