* 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
91 lines
3.1 KiB
Ruby
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
|