Save display times in the db
All checks were successful
CI / scan_ruby (push) Successful in 17s
CI / scan_js (push) Successful in 11s
CI / lint (push) Successful in 12s
CI / test (push) Successful in 41s

This commit is contained in:
sto
2025-03-26 17:00:06 +01:00
parent c98caeea92
commit a5d165c4b3
14 changed files with 78 additions and 56 deletions

View File

@@ -1,4 +1,6 @@
class CompletionsController < ApplicationController
include CompletionsConcern
before_action :set_contest
before_action :set_data, only: %i[ create edit new update ]
before_action :set_completion, only: %i[ destroy edit update ]
@@ -25,6 +27,7 @@ class CompletionsController < ApplicationController
@completion = Completion.new(completion_params)
@completion.contest_id = @contest.id
if @completion.save
extend_completions!(@completion.contestant)
redirect_to contest_path(@contest)
else
logger = Logger.new(STDOUT)
@@ -41,6 +44,7 @@ class CompletionsController < ApplicationController
@completion.contestant_id = params[:contestant_id]
end
if @completion.update(completion_params)
extend_completions!(@completion.contestant)
redirect_to @contest
else
@title = "Edit completion"

View File

@@ -19,12 +19,13 @@ module CompletionsConcern
pad(seconds)
end
def extend_completions!(completions)
def extend_completions!(contestant)
current_time_from_start = 0
@completions.each do |completion|
completion.display_time_from_start = display_time(completion.time_seconds)
completion.display_relative_time = display_time(completion.time_seconds - current_time_from_start)
current_time_from_start += completion.time_seconds
contestant.completions.order(:time_seconds).each do |completion|
completion.update(display_time_from_start: display_time(completion.time_seconds),
display_relative_time: display_time(completion.time_seconds - current_time_from_start))
current_time_from_start = completion.time_seconds
end
contestant.update(display_time: display_time(current_time_from_start))
end
end

View File

@@ -1,6 +1,4 @@
class ContestantsController < ApplicationController
include CompletionsConcern
before_action :set_contest
before_action :set_contestant, only: %i[ destroy edit update]
before_action :set_completions, only: %i[edit update ]
@@ -61,8 +59,6 @@ class ContestantsController < ApplicationController
def set_completions
@completions = @contestant.completions.order(:time_seconds)
extend_completions!(@completions)
@completions
end
def contestant_params

View File

@@ -1,6 +1,4 @@
class ContestsController < ApplicationController
include CompletionsConcern
before_action :set_contest, only: %i[ destroy edit show update ]
skip_before_action :require_authentication, only: %i[ scoreboard ]
@@ -70,7 +68,6 @@ class ContestsController < ApplicationController
@title = @contest.name
@contestants = @contest.contestants.order(:name)
@puzzles = @contest.puzzles.order(:id)
extend_completions!(@contest.completions)
render :scoreboard
end