From b71ca8e458155ab8ac6ccabff3cffd76bd17aa28 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Fri, 7 Feb 2025 01:51:24 -0800 Subject: [PATCH] Refactor canonical object blueprints --- app/blueprints/api/v1/character_blueprint.rb | 101 ++++++++++--------- app/blueprints/api/v1/summon_blueprint.rb | 60 ++++++----- app/blueprints/api/v1/weapon_blueprint.rb | 55 ++++++---- 3 files changed, 124 insertions(+), 92 deletions(-) diff --git a/app/blueprints/api/v1/character_blueprint.rb b/app/blueprints/api/v1/character_blueprint.rb index 1857ac1..6d8f30e 100644 --- a/app/blueprints/api/v1/character_blueprint.rb +++ b/app/blueprints/api/v1/character_blueprint.rb @@ -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 diff --git a/app/blueprints/api/v1/summon_blueprint.rb b/app/blueprints/api/v1/summon_blueprint.rb index 1b8dfa7..6b7c824 100644 --- a/app/blueprints/api/v1/summon_blueprint.rb +++ b/app/blueprints/api/v1/summon_blueprint.rb @@ -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 diff --git a/app/blueprints/api/v1/weapon_blueprint.rb b/app/blueprints/api/v1/weapon_blueprint.rb index 70fd536..7075680 100644 --- a/app/blueprints/api/v1/weapon_blueprint.rb +++ b/app/blueprints/api/v1/weapon_blueprint.rb @@ -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