blueprint looks up skill and calculates strength validation checks quality range instead of strength value
64 lines
1.7 KiB
Ruby
64 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Api
|
|
module V1
|
|
class CollectionArtifactBlueprint < ApiBlueprint
|
|
identifier :id
|
|
|
|
fields :level, :nickname, :reroll_slot, :created_at, :updated_at
|
|
|
|
# Return element as integer
|
|
field :element do |obj|
|
|
obj.element_before_type_cast
|
|
end
|
|
|
|
# Proficiency is only present on quirk artifacts, return as integer
|
|
field :proficiency, if: ->(_field, obj, _options) { obj.proficiency.present? } do |obj|
|
|
obj.proficiency_before_type_cast
|
|
end
|
|
|
|
field :skills do |obj|
|
|
[
|
|
[obj.skill1, 1],
|
|
[obj.skill2, 2],
|
|
[obj.skill3, 3],
|
|
[obj.skill4, 4]
|
|
].map do |skill, slot|
|
|
next nil if skill.blank? || skill == {}
|
|
|
|
# Determine skill group based on slot
|
|
group = case slot
|
|
when 1, 2 then 1 # Group I
|
|
when 3 then 2 # Group II
|
|
when 4 then 3 # Group III
|
|
end
|
|
|
|
# Look up skill and compute strength from quality
|
|
modifier = skill['modifier']
|
|
quality = skill['quality'] || 1
|
|
level = skill['level'] || 1
|
|
|
|
artifact_skill = ArtifactSkill.find_skill(group, modifier)
|
|
strength = artifact_skill&.strength_for_quality(quality)
|
|
|
|
{
|
|
modifier: modifier,
|
|
strength: strength,
|
|
level: level
|
|
}
|
|
end
|
|
end
|
|
|
|
# Include grade and recommendation by default
|
|
field :grade do |obj|
|
|
ArtifactGrader.new(obj).grade
|
|
end
|
|
|
|
association :artifact, blueprint: ArtifactBlueprint
|
|
|
|
view :full do
|
|
association :artifact, blueprint: ArtifactBlueprint
|
|
end
|
|
end
|
|
end
|
|
end
|