Files
puzzle-scoreboard/app/models/contestant.rb
sto ae3c7c73e1
Some checks failed
CI / scan_ruby (push) Failing after 12s
CI / scan_js (push) Failing after 10s
CI / lint (push) Successful in 13s
CI / test (push) Failing after 39s
Add admin action to regenerate QR codes
2025-11-21 10:53:23 +01:00

71 lines
1.5 KiB
Ruby

# == Schema Information
#
# Table name: contestants
#
# id :integer not null, primary key
# display_time :string
# email :string
# name :string
# projected_time :string
# qrcode :string
# time_seconds :integer
# created_at :datetime not null
# updated_at :datetime not null
# contest_id :integer not null
#
# Indexes
#
# index_contestants_on_contest_id (contest_id)
#
# Foreign Keys
#
# contest_id (contest_id => contests.id)
#
class Contestant < ApplicationRecord
belongs_to :contest
has_many :completions, dependent: :destroy
has_one :offline, dependent: :destroy
has_and_belongs_to_many :categories
before_validation :initialize_time_seconds_if_empty
before_commit :generate_qrcode, on: :create
validates :name, presence: true
validates :time_seconds, presence: true
generates_token_for :token
def form_name
if email.present?
"#{name} - #{email}"
else
name
end
end
def regenerate_qrcode
generate_qrcode
end
private
def initialize_time_seconds_if_empty
if !self.time_seconds
self.time_seconds = 0
end
end
def generate_qrcode
host = Rails.application.config.action_controller.default_url_options[:host]
qrcode = RQRCode::QRCode.new("https://#{host}/public/p/#{self.generate_token_for(:token)}")
self.qrcode = qrcode.as_svg(
color: "000",
shape_rendering: "crispEdges",
module_size: 3,
standalone: true,
use_path: true,
viewbox: true
)
end
end