hensei-api/app/blueprints/api/v1/collection_artifact_blueprint.rb
Justin Edmund 86e5b9fffb compute strength from quality at display time
blueprint looks up skill and calculates strength
validation checks quality range instead of strength value
2025-12-18 22:30:44 -08:00

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