hensei-api/lib/granblue/transformers/base_deck_transformer.rb
Justin Edmund 0d5d4d5f59
Jedmund/import (#167)
* Move app/helpers/granblue_wiki to lib/parsers/wiki

This clears up the namespace beginning with "Granblue"

* Removed some top-level Granblue libs

DataImporter and DownloadManager exist inside of the PostDeployment namespace now so these files are redundant

* Fix Downloaders namespace

Our namespace was singular Downloader, now it is plural Downloaders to match the folder name

* Fix import paths

* DownloadManager was moved to downloaders/
* import_data task now uses the PostDeployment version of DataImporter

* Update application.rb

Eager-Load/Autoload the lib/ folder

* Update cors.rb

Add Granblue website and Extension ID to CORS

* Add transformers

Transformers take raw data from Granblue Fantasy and transforms them into hensei-compatible JSON. Transformers heavily borrow from vazkii/hensei-transfer.

* Add ImportController and route

This adds the controller that handles creating a full party from transformed Granblue Fantasy data
2025-01-17 12:02:12 -08:00

91 lines
3.1 KiB
Ruby

# frozen_string_literal: true
module Granblue
module Transformers
class BaseDeckTransformer < BaseTransformer
def transform
Rails.logger.info "[TRANSFORM] Starting BaseDeckTransformer#transform"
Rails.logger.info "[TRANSFORM] Data class: #{data.class}"
# Handle already transformed parameters
if data.is_a?(ActionController::Parameters) && data.key?(:name)
Rails.logger.info "[TRANSFORM] Found existing parameters, returning as is"
return data.to_h.symbolize_keys
end
# Handle raw game data
Rails.logger.info "[TRANSFORM] Processing raw game data"
input_data = data['import'] if data.is_a?(Hash)
unless input_data
Rails.logger.error "[TRANSFORM] No import data found"
return {}
end
Rails.logger.info "[TRANSFORM] Found import data"
deck = input_data['deck']
pc = deck['pc'] if deck
unless deck && pc
Rails.logger.error "[TRANSFORM] Missing deck or pc data"
Rails.logger.error "[TRANSFORM] deck present: #{!!deck}"
Rails.logger.error "[TRANSFORM] pc present: #{!!pc}"
return {}
end
Rails.logger.info "[TRANSFORM] Building deck data structure"
result = {
lang: language,
name: deck['name'] || 'Untitled',
class: pc.dig('job', 'master', 'name'),
extra: pc['isExtraDeck'] || false,
subskills: transform_subskills(pc['set_action']),
characters: transform_characters(deck['npc']),
weapons: transform_weapons(pc['weapons']),
summons: transform_summons(pc['summons'], pc['quick_user_summon_id']),
sub_summons: transform_summons(pc['sub_summons']),
friend_summon: pc.dig('damage_info', 'summon_name')
}
Rails.logger.info "[TRANSFORM] Completed transformation"
Rails.logger.debug "[TRANSFORM] Result: #{result}"
result
end
private
def transform_subskills(set_action)
Rails.logger.info "[TRANSFORM] Processing subskills"
unless set_action.is_a?(Array) && !set_action.empty?
Rails.logger.info "[TRANSFORM] No valid set_action data"
return []
end
skills = set_action[0]
unless skills.is_a?(Array)
Rails.logger.info "[TRANSFORM] Invalid skills array"
return []
end
results = skills.map { |skill| skill['name'] if skill.is_a?(Hash) }.compact
Rails.logger.info "[TRANSFORM] Found #{results.length} subskills"
results
end
def transform_characters(npc_data)
Rails.logger.info "[TRANSFORM] Processing characters"
CharacterTransformer.new(npc_data, options).transform
end
def transform_weapons(weapons_data)
Rails.logger.info "[TRANSFORM] Processing weapons"
WeaponTransformer.new(weapons_data, options).transform
end
def transform_summons(summons_data, quick_summon_id = nil)
Rails.logger.info "[TRANSFORM] Processing summons"
SummonTransformer.new(summons_data, quick_summon_id, options).transform
end
end
end
end