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 +}