From 7c814610b92f9c9adedf6995a5bb0ba886d13fe2 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Thu, 6 Jul 2023 00:04:52 -0700 Subject: [PATCH] Create PartyTransformer Transforms data into Party objects and back again. We also created PartyParams to send data back to the API in a uniform way. We organized the resulting object more than we have in the past since we can do what we want now. Lastly, we removed characters, weapons and summons from this object. We will probably make a new Grid object and reference that here instead. --- transformers/PartyTransformer.tsx | 69 +++++++++++++++++++++++++++++++ types/Party.d.ts | 57 +++++++++++++------------ types/PartyParams.d.ts | 22 ++++++++++ 3 files changed, 122 insertions(+), 26 deletions(-) create mode 100644 transformers/PartyTransformer.tsx create mode 100644 types/PartyParams.d.ts diff --git a/transformers/PartyTransformer.tsx b/transformers/PartyTransformer.tsx new file mode 100644 index 00000000..3e63b0a7 --- /dev/null +++ b/transformers/PartyTransformer.tsx @@ -0,0 +1,69 @@ +import * as Raid from './RaidTransformer' +import * as User from './UserTransformer' + +// Transforms API response to Party object +export function toObject(data: any): Party { + return { + id: data.id, + localId: data.local_id, + name: data.name, + description: data.description, + shortcode: data.shortcode, + user: User.toObject(data.user), + details: { + extra: data.extra, + fullAuto: data.full_auto, + autoGuard: data.auto_guard, + autoSummon: data.auto_summon, + chargeAttack: data.charge_attack, + clearTime: data.clear_time, + buttonCount: data.button_count, + turnCount: data.turn_count, + chainCount: data.chain_count, + }, + protagonist: { + job: data.job, + skills: data.job_skills, + masterLevel: data.master_level, + ultimateMastery: data.ultimate_mastery, + accessory: data.accessory, + }, + social: { + favorited: data.favorited, + remix: data.remix, + remixes: data.remixes, + sourceParty: data.source_party, + }, + timestamps: { + createdAt: data.created_at, + updatedAt: data.updated_at, + }, + raid: Raid.toObject(data.raid), + guidebooks: data.guidebooks, + } as Party +} + +// Transforms Party object into API parameters +export function toParams(party: Party): PartyParams { + return { + local_id: party.localId, + name: party.name, + description: party.description, + extra: party.details.extra, + full_auto: party.details.fullAuto, + auto_guard: party.details.autoGuard, + auto_summon: party.details.autoSummon, + charge_attack: party.details.chargeAttack, + clear_time: party.details.clearTime, + button_count: party.details.buttonCount, + turn_count: party.details.turnCount, + chain_count: party.details.chainCount, + raid_id: party.raid.id, + job_id: party.protagonist.job.id, + master_level: party.protagonist.masterLevel, + ultimate_mastery: party.protagonist.ultimateMastery, + guidebook1_id: party.guidebooks[0]?.id, + guidebook2_id: party.guidebooks[1]?.id, + guidebook3_id: party.guidebooks[2]?.id, + } as PartyParams +} diff --git a/types/Party.d.ts b/types/Party.d.ts index e2b4d23c..152a35a6 100644 --- a/types/Party.d.ts +++ b/types/Party.d.ts @@ -15,34 +15,39 @@ type GuidebookList = { interface Party { id: string + localId?: string name: string description: string - raid: Raid - full_auto: boolean - auto_guard: boolean - auto_summon: boolean - charge_attack: boolean - clear_time: number - button_count?: number - turn_count?: number - chain_count?: number - source_party?: Party - job: Job - master_level?: number - ultimate_mastery?: number - job_skills: JobSkillList - accessory: JobAccessory shortcode: string - extra: boolean - guidebooks: GuidebookList - favorited: boolean - characters: Array - weapons: Array - summons: Array user: User - local_id?: string - remix: boolean - remixes: Party[] - created_at: string - updated_at: string + details: { + extra: boolean + fullAuto: boolean + autoGuard: boolean + autoSummon: boolean + chargeAttack: boolean + clearTime: number + buttonCount?: number + turnCount?: number + chainCount?: number + } + protagonist: { + job: Job + skills: JobSkillList + masterLevel?: number + ultimateMastery?: number + accessory: JobAccessory + } + social: { + favorited: boolean + sourceParty?: Party + remix: boolean + remixes: Party[] + } + raid: Raid + guidebooks: GuidebookList + timestamps: { + createdAt: string + updatedAt: string + } } diff --git a/types/PartyParams.d.ts b/types/PartyParams.d.ts new file mode 100644 index 00000000..f17a2777 --- /dev/null +++ b/types/PartyParams.d.ts @@ -0,0 +1,22 @@ +interface PartyParams { + local_id?: string + name?: string + description?: string + raid_id?: string + extra?: boolean + job_id?: string + master_level?: number + ultimate_mastery?: number + accessory_id?: string + full_auto?: boolean + auto_guard?: boolean + auto_summon?: boolean + charge_attack?: boolean + clear_time?: number + button_count?: number + turn_count?: number + chain_count?: number + guidebook1_id?: string + guidebook2_id?: string + guidebook3_id?: string +}