app/controllers/strategies_controller.rb
# frozen_string_literal: true
class StrategiesController < ApplicationController
include CollectionPageSetupConcern
include ReminderHelper
include StrategiesConcern
include Shared
include MomentsHelper
include TagsHelper
before_action :set_strategy, only: %i[show edit update destroy]
# GET /strategies
# GET /strategies.json
def index
page_collection('@strategies', 'strategy')
respond_to do |format|
format.json do
render json: { data: moments_or_strategy_props(@strategies),
lastPage: @strategies.last_page? }
end
format.html
end
end
# GET /strategies/1
# GET /strategies/1.json
def show
setup_stories
show_with_comments(@strategy)
end
# POST /strategies/quick_create
def quick_create
# Assume all viewers and comments allowed
viewers = current_user.allies_by_status(:accepted).pluck(:id)
shared_quick_create(Strategy.new(quick_create_params(viewers)))
end
# GET /strategies/new
def new
@viewers = current_user.allies_by_status(:accepted)
@strategy = Strategy.new
@categories = current_user.categories.is_visible.order('created_at DESC')
@category = Category.new
@strategy.build_perform_strategy_reminder
end
# GET /strategies/1/edit
def edit
redirect_to_path(strategy_path(@strategy)) unless @strategy.user_id == current_user.id
@viewers = current_user.allies_by_status(:accepted)
@categories = current_user.categories.is_visible
.or(Category.where(id: @strategy.category_ids))
.order('created_at DESC')
@category = Category.new
PerformStrategyReminder.find_or_initialize_by(strategy_id: @strategy.id)
end
# POST /strategies
# POST /strategies.json
def create
@strategy = Strategy.new(strategy_params.merge(user_id: current_user.id))
@viewers = current_user.allies_by_status(:accepted)
@category = Category.new
@strategy.published_at = Time.zone.now if publishing?
shared_create(@strategy)
end
# POST /strategies
# POST /strategies.json
def premade
strategy = premade_strategy
respond_to do |format|
if strategy.save
PerformStrategyReminder.create!(strategy:, active: false)
format.json { head :no_content }
else
format.json { render_errors(strategy) }
end
format.html { redirect_to strategies_path }
end
end
# PATCH/PUT /strategies/1
# PATCH/PUT /strategies/1.json
def update
@viewers = current_user.allies_by_status(:accepted)
@category = Category.new
if publishing? && !@strategy.published?
@strategy.published_at = Time.zone.now
elsif saving_as_draft?
@strategy.published_at = nil
end
empty_array_for :viewers, :category
shared_update(@strategy, strategy_params)
end
# DELETE /strategies/1
# DELETE /strategies/1.json
def destroy
shared_destroy(@strategy)
PerformStrategyReminder.where(strategy_id: @strategy.id).destroy_all
end
def tagged
setup_stories
respond_to do |format|
format.json do
render json: tagged_strategies_data_json if @strategies
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_strategy
@strategy = Strategy.friendly.find(params[:id])
rescue ActiveRecord::RecordNotFound
redirect_to_path(strategies_path)
end
def quick_create_params(viewers)
{ user_id: current_user.id, comment: true, viewers:, visible: true,
description: params[:strategy][:description], published_at: Time.zone.now,
category: params[:strategy][:category], name: params[:strategy][:name] }
end
end