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.
This commit is contained in:
Justin Edmund 2023-07-06 00:04:52 -07:00
parent 881ed31dd1
commit 7c814610b9
3 changed files with 122 additions and 26 deletions

View file

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

57
types/Party.d.ts vendored
View file

@ -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<GridCharacter>
weapons: Array<GridWeapon>
summons: Array<GridSummon>
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
}
}

22
types/PartyParams.d.ts vendored Normal file
View file

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