hensei-api/app/models/gw_event.rb
Justin Edmund f2a058b6b2 add GW events and scoring system
- create gw_events, crew_gw_participations, gw_crew_scores, gw_individual_scores
- add models, blueprints, controllers for GW tracking
- add model specs and gw_events controller specs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 23:34:54 -08:00

42 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class GwEvent < ApplicationRecord
include GranblueEnums
has_many :crew_gw_participations, dependent: :destroy
has_many :crews, through: :crew_gw_participations
enum :element, ELEMENTS
validates :name, presence: true
validates :element, presence: true
validates :start_date, presence: true
validates :end_date, presence: true
validates :event_number, presence: true, uniqueness: true
validate :end_date_after_start_date
scope :upcoming, -> { where('start_date > ?', Date.current).order(start_date: :asc) }
scope :past, -> { where('end_date < ?', Date.current).order(start_date: :desc) }
scope :current, -> { where('start_date <= ? AND end_date >= ?', Date.current, Date.current) }
def active?
start_date <= Date.current && end_date >= Date.current
end
def upcoming?
start_date > Date.current
end
def finished?
end_date < Date.current
end
private
def end_date_after_start_date
return unless start_date.present? && end_date.present?
errors.add(:end_date, 'must be after start date') if end_date < start_date
end
end