Implement offline POST method for starting an offline participation
Some checks failed
CI / scan_ruby (push) Successful in 17s
CI / scan_js (push) Successful in 14s
CI / lint (push) Failing after 15s
CI / test (push) Successful in 42s

This commit is contained in:
sto
2025-10-30 11:37:20 +01:00
parent aea001cdf6
commit 37a65526e4
12 changed files with 94 additions and 25 deletions

View File

@@ -1,6 +1,7 @@
class ContestsController < ApplicationController
before_action :set_contest, only: %i[ destroy edit show update ]
skip_before_action :require_authentication, only: %i[ scoreboard offline_new ]
before_action :offline_setup, only: %i[ offline_new offline_create ]
skip_before_action :require_authentication, only: %i[ scoreboard offline_new offline_create ]
def index
authorize :contest
@@ -100,22 +101,30 @@ class ContestsController < ApplicationController
end
def offline_new
@contest = Contest.find_by(slug: params[:id])
unless @contest && @contest.offline_form
skip_authorization
not_found and return
end
authorize :contest
I18n.locale = @contest.lang
@title = I18n.t("contests.scoreboard.title", name: @contest.name)
authorize @contest
@offline = Offline.new
end
def offline_create
authorize @contest
@offline = Offline.new(offline_start_params)
@offline.contest = @contest
@offline.start_time = Time.now()
if @offline.save
redirect_to "/public/#{@contest.friendly_id}/offline/test"
else
render :offline_new, status: :unprocessable_entity
end
end
private
def offline_setup
@contest = Contest.find_by(slug: params[:id])
I18n.locale = @contest.lang
@title = I18n.t("contests.scoreboard.title", name: @contest.name)
end
def set_badges
@badges = []
@badges.push(t("helpers.badges.team")) if @contest.team
@@ -139,4 +148,8 @@ class ContestsController < ApplicationController
end
end
end
def offline_start_params
params.expect(offline: [ :name, :start_image ])
end
end