Refactor canonical object blueprints

This commit is contained in:
Justin Edmund 2025-02-07 01:51:24 -08:00
parent e7db082d8b
commit b71ca8e458
3 changed files with 124 additions and 92 deletions

View file

@ -3,72 +3,77 @@
module Api module Api
module V1 module V1
class CharacterBlueprint < ApiBlueprint class CharacterBlueprint < ApiBlueprint
field :name do |w| field :name do |c|
{ {
en: w.name_en, en: c.name_en,
ja: w.name_jp ja: c.name_jp
} }
end end
fields :granblue_id, :character_id, :rarity, fields :granblue_id, :character_id, :rarity,
:element, :gender, :special :element, :gender, :special
field :uncap do |w| field :uncap do |c|
{ {
flb: w.flb, flb: c.flb,
ulb: w.ulb ulb: c.ulb
} }
end end
field :hp do |w| field :race do |c|
{ [c.race1, c.race2].compact
min_hp: w.min_hp,
max_hp: w.max_hp,
max_hp_flb: w.max_hp_flb
}
end end
field :atk do |w| field :proficiency do |c|
{ [c.proficiency1, c.proficiency2].compact
min_atk: w.min_atk,
max_atk: w.max_atk,
max_atk_flb: w.max_atk_flb
}
end end
field :race do |w| view :full do
[ include_view :stats
w.race1, include_view :rates
w.race2 include_view :dates
]
end
field :proficiency do |w| field :awakenings do
[ Character::AWAKENINGS.map do |awakening|
w.proficiency1, AwakeningBlueprint.render_as_hash(OpenStruct.new(awakening))
w.proficiency2 end
]
end
field :data do |w|
{
base_da: w.base_da,
base_ta: w.base_ta
}
end
field :ougi_ratio do |w|
{
ougi_ratio: w.ougi_ratio,
ougi_ratio_flb: w.ougi_ratio_flb
}
end
field :awakenings do
Awakening.where(object_type: 'Character').map do |a|
AwakeningBlueprint.render_as_hash(a)
end end
end end
view :stats do
field :hp do |c|
{
min_hp: c.min_hp,
max_hp: c.max_hp,
max_hp_flb: c.max_hp_flb
}
end
field :atk do |c|
{
min_atk: c.min_atk,
max_atk: c.max_atk,
max_atk_flb: c.max_atk_flb
}
end
end
view :rates do
fields :base_da, :base_ta
field :ougi_ratio do |c|
{
ougi_ratio: c.ougi_ratio,
ougi_ratio_flb: c.ougi_ratio_flb
}
end
end
view :dates do
field :release_date
field :flb_date
field :ulb_date
end
end end
end end
end end

View file

@ -3,41 +3,55 @@
module Api module Api
module V1 module V1
class SummonBlueprint < ApiBlueprint class SummonBlueprint < ApiBlueprint
field :name do |w| field :name do |s|
{ {
en: w.name_en, en: s.name_en,
ja: w.name_jp ja: s.name_jp
} }
end end
fields :granblue_id, :element, :rarity, :max_level fields :granblue_id, :element, :rarity, :max_level
field :uncap do |w| field :uncap do |s|
{ {
flb: w.flb, flb: s.flb,
ulb: w.ulb, ulb: s.ulb,
transcendence: w.transcendence transcendence: s.transcendence
} }
end end
field :hp do |w| view :stats do
{ field :hp do |s|
min_hp: w.min_hp, {
max_hp: w.max_hp, min_hp: s.min_hp,
max_hp_flb: w.max_hp_flb, max_hp: s.max_hp,
max_hp_ulb: w.max_hp_ulb, max_hp_flb: s.max_hp_flb,
max_hp_xlb: w.max_hp_xlb max_hp_ulb: s.max_hp_ulb,
} max_hp_xlb: s.max_hp_xlb
}
end
field :atk do |s|
{
min_atk: s.min_atk,
max_atk: s.max_atk,
max_atk_flb: s.max_atk_flb,
max_atk_ulb: s.max_atk_ulb,
max_atk_xlb: s.max_atk_xlb
}
end
end end
field :atk do |w| view :dates do
{ field :release_date
min_atk: w.min_atk, field :flb_date
max_atk: w.max_atk, field :ulb_date
max_atk_flb: w.max_atk_flb, field :transcendence_date
max_atk_ulb: w.max_atk_ulb, end
max_atk_xlb: w.max_atk_xlb
} view :full do
include_view :stats
include_view :dates
end end
end end
end end

View file

@ -10,10 +10,12 @@ module Api
} }
end end
# Primary information
fields :granblue_id, :element, :proficiency, fields :granblue_id, :element, :proficiency,
:max_level, :max_skill_level, :max_awakening_level, :limit, :rarity, :max_level, :max_skill_level, :max_awakening_level, :limit, :rarity,
:series, :ax, :ax_type :series, :ax, :ax_type
# Uncap information
field :uncap do |w| field :uncap do |w|
{ {
flb: w.flb, flb: w.flb,
@ -22,28 +24,39 @@ module Api
} }
end end
field :hp do |w| view :stats do
{ field :hp do |w|
min_hp: w.min_hp, {
max_hp: w.max_hp, min_hp: w.min_hp,
max_hp_flb: w.max_hp_flb, max_hp: w.max_hp,
max_hp_ulb: w.max_hp_ulb max_hp_flb: w.max_hp_flb,
} max_hp_ulb: w.max_hp_ulb
end }
field :atk do |w|
{
min_atk: w.min_atk,
max_atk: w.max_atk,
max_atk_flb: w.max_atk_flb,
max_atk_ulb: w.max_atk_ulb
}
end
field :awakenings, if: ->(_fn, obj, _opt) { obj.awakenings.length.positive? } do |w|
w.awakenings.map do |a|
AwakeningBlueprint.render_as_hash(a)
end end
field :atk do |w|
{
min_atk: w.min_atk,
max_atk: w.max_atk,
max_atk_flb: w.max_atk_flb,
max_atk_ulb: w.max_atk_ulb
}
end
end
view :dates do
field :release_date
field :flb_date
field :ulb_date
field :transcendence_date
end
view :full do
include_view :stats
include_view :dates
association :awakenings,
blueprint: AwakeningBlueprint,
if: ->(_field_name, weapon, _options) { weapon.awakenings.any? }
end end
end end
end end