class MessagesController < ApplicationController include CompletionsConcern skip_before_action :verify_authenticity_token, only: %i[ create ] before_action :set_contest, only: %i[ convert destroy ] before_action :set_message, only: %i[ convert destroy ] before_action :set_data, only: %i[ convert ] def self.local_prefixes super + [ "completions" ] end def create allow_unauthenticated_access skip_authorization @message_params = message_params @contest = Contest.find_by_token_for(:token, params[:token]) @message = Message.new(text: params[:text], time_seconds: params[:time_seconds], display_time: display_time(params[:time_seconds]), contest: @contest) if @contest && @message.save respond_to do |format| format.json { render json: {}, status: 200 } end else respond_to do |format| format.json { render json: { error: "invalid contest token" }, status: 400 } end end end def convert authorize @contest @completion = Completion.new() @completion.display_time_from_start = @message.display_time render "completions/new" end def destroy authorize @contest @message.destroy redirect_to contest_path(@contest) end private def set_contest @contest = Contest.find(params[:contest_id]) end def set_message @message = Message.find(params[:message_id]) end def set_data @contestants = @contest.contestants @puzzles = @contest.puzzles end def message_params params.expect(message: [ :author, :text, :time_seconds, :token ]) end end