add default awakening, sorting, filtering scopes to CollectionCharacter

This commit is contained in:
Justin Edmund 2025-12-02 17:19:07 -08:00
parent 5bc179afa8
commit e97b0ade55

View file

@ -3,6 +3,8 @@ class CollectionCharacter < ApplicationRecord
belongs_to :character
belongs_to :awakening, optional: true
before_save :add_default_awakening
validates :character_id, uniqueness: { scope: :user_id,
message: "already exists in your collection" }
validates :uncap_level, inclusion: { in: 0..5 }
@ -26,6 +28,26 @@ class CollectionCharacter < ApplicationRecord
scope :transcended, -> { where('transcendence_step > 0') }
scope :with_awakening, -> { where.not(awakening_id: nil) }
# Sorting scopes
scope :sorted_by, ->(sort_key) {
case sort_key
when 'name_asc'
joins(:character).order('characters.name_en ASC NULLS LAST')
when 'name_desc'
joins(:character).order('characters.name_en DESC NULLS LAST')
when 'element_asc'
joins(:character).order('characters.element ASC')
when 'element_desc'
joins(:character).order('characters.element DESC')
when 'proficiency_asc'
joins(:character).order('characters.proficiency1 ASC')
when 'proficiency_desc'
joins(:character).order('characters.proficiency1 DESC')
else
order(created_at: :desc) # Default: newest first
end
}
def blueprint
Api::V1::CollectionCharacterBlueprint
end
@ -61,4 +83,10 @@ class CollectionCharacter < ApplicationRecord
errors.add(:transcendence_step, "requires uncap level 5 (current: #{uncap_level})")
end
end
def add_default_awakening
return unless awakening.nil?
self.awakening = Awakening.where(slug: 'character-balanced').sole
end
end