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 V1
class CharacterBlueprint < ApiBlueprint
field :name do |w|
field :name do |c|
{
en: w.name_en,
ja: w.name_jp
en: c.name_en,
ja: c.name_jp
}
end
fields :granblue_id, :character_id, :rarity,
:element, :gender, :special
field :uncap do |w|
field :uncap do |c|
{
flb: w.flb,
ulb: w.ulb
flb: c.flb,
ulb: c.ulb
}
end
field :hp do |w|
{
min_hp: w.min_hp,
max_hp: w.max_hp,
max_hp_flb: w.max_hp_flb
}
field :race do |c|
[c.race1, c.race2].compact
end
field :atk do |w|
{
min_atk: w.min_atk,
max_atk: w.max_atk,
max_atk_flb: w.max_atk_flb
}
field :proficiency do |c|
[c.proficiency1, c.proficiency2].compact
end
field :race do |w|
[
w.race1,
w.race2
]
end
view :full do
include_view :stats
include_view :rates
include_view :dates
field :proficiency do |w|
[
w.proficiency1,
w.proficiency2
]
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)
field :awakenings do
Character::AWAKENINGS.map do |awakening|
AwakeningBlueprint.render_as_hash(OpenStruct.new(awakening))
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

View file

@ -3,41 +3,55 @@
module Api
module V1
class SummonBlueprint < ApiBlueprint
field :name do |w|
field :name do |s|
{
en: w.name_en,
ja: w.name_jp
en: s.name_en,
ja: s.name_jp
}
end
fields :granblue_id, :element, :rarity, :max_level
field :uncap do |w|
field :uncap do |s|
{
flb: w.flb,
ulb: w.ulb,
transcendence: w.transcendence
flb: s.flb,
ulb: s.ulb,
transcendence: s.transcendence
}
end
field :hp do |w|
{
min_hp: w.min_hp,
max_hp: w.max_hp,
max_hp_flb: w.max_hp_flb,
max_hp_ulb: w.max_hp_ulb,
max_hp_xlb: w.max_hp_xlb
}
view :stats do
field :hp do |s|
{
min_hp: s.min_hp,
max_hp: s.max_hp,
max_hp_flb: s.max_hp_flb,
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
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,
max_atk_xlb: w.max_atk_xlb
}
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
end
end
end

View file

@ -10,10 +10,12 @@ module Api
}
end
# Primary information
fields :granblue_id, :element, :proficiency,
:max_level, :max_skill_level, :max_awakening_level, :limit, :rarity,
:series, :ax, :ax_type
# Uncap information
field :uncap do |w|
{
flb: w.flb,
@ -22,28 +24,39 @@ module Api
}
end
field :hp do |w|
{
min_hp: w.min_hp,
max_hp: w.max_hp,
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)
view :stats do
field :hp do |w|
{
min_hp: w.min_hp,
max_hp: w.max_hp,
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
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