diff --git a/app/models/collection_character.rb b/app/models/collection_character.rb index 457280a..c37d717 100644 --- a/app/models/collection_character.rb +++ b/app/models/collection_character.rb @@ -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 \ No newline at end of file