Add API type definitions
This commit is contained in:
parent
1b6da60aa3
commit
e8fa1545f8
2 changed files with 342 additions and 0 deletions
174
src/lib/types/api/entities.ts
Normal file
174
src/lib/types/api/entities.ts
Normal file
|
|
@ -0,0 +1,174 @@
|
||||||
|
// Core entity types based on Rails blueprints
|
||||||
|
// These are the base types for game objects
|
||||||
|
|
||||||
|
export interface LocalizedName {
|
||||||
|
en: string
|
||||||
|
ja: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Weapon entity from WeaponBlueprint
|
||||||
|
export interface Weapon {
|
||||||
|
id: string
|
||||||
|
granblueId: string
|
||||||
|
name: LocalizedName
|
||||||
|
element: number
|
||||||
|
proficiency: number
|
||||||
|
rarity: number
|
||||||
|
maxLevel: number
|
||||||
|
maxSkillLevel: number
|
||||||
|
maxAwakeningLevel: number
|
||||||
|
series: number
|
||||||
|
ax: boolean
|
||||||
|
axType: number
|
||||||
|
hp: {
|
||||||
|
minHp: number
|
||||||
|
maxHp: number
|
||||||
|
maxHpFlb: number
|
||||||
|
maxHpUlb: number
|
||||||
|
}
|
||||||
|
atk: {
|
||||||
|
minAtk: number
|
||||||
|
maxAtk: number
|
||||||
|
maxAtkFlb: number
|
||||||
|
maxAtkUlb: number
|
||||||
|
}
|
||||||
|
uncap: {
|
||||||
|
flb: boolean
|
||||||
|
ulb: boolean
|
||||||
|
transcendence: boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Character entity from CharacterBlueprint
|
||||||
|
export interface Character {
|
||||||
|
id: string
|
||||||
|
granblueId: string
|
||||||
|
name: LocalizedName
|
||||||
|
element: number
|
||||||
|
rarity: number
|
||||||
|
maxLevel: number
|
||||||
|
flb: boolean
|
||||||
|
ulb: boolean
|
||||||
|
transcendence: boolean
|
||||||
|
special: boolean
|
||||||
|
recruits: string | null
|
||||||
|
}
|
||||||
|
|
||||||
|
// Summon entity from SummonBlueprint
|
||||||
|
export interface Summon {
|
||||||
|
id: string
|
||||||
|
granblueId: string
|
||||||
|
name: LocalizedName
|
||||||
|
element: number
|
||||||
|
rarity: number
|
||||||
|
maxLevel: number
|
||||||
|
flb: boolean
|
||||||
|
ulb: boolean
|
||||||
|
transcendence: boolean
|
||||||
|
subaura: boolean
|
||||||
|
hp: {
|
||||||
|
minHp: number
|
||||||
|
maxHp: number
|
||||||
|
maxHpFlb: number
|
||||||
|
maxHpUlb: number
|
||||||
|
}
|
||||||
|
atk: {
|
||||||
|
minAtk: number
|
||||||
|
maxAtk: number
|
||||||
|
maxAtkFlb: number
|
||||||
|
maxAtkUlb: number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Job entity from JobBlueprint
|
||||||
|
export interface Job {
|
||||||
|
id: string
|
||||||
|
granblueId: string
|
||||||
|
name: LocalizedName
|
||||||
|
row: number
|
||||||
|
order: number
|
||||||
|
proficiency: [number, number]
|
||||||
|
masterLevel?: number
|
||||||
|
ultimateMastery?: number
|
||||||
|
accessory?: boolean
|
||||||
|
accessoryType?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// JobSkill entity
|
||||||
|
export interface JobSkill {
|
||||||
|
id: string
|
||||||
|
name: LocalizedName
|
||||||
|
slug: string
|
||||||
|
category: number
|
||||||
|
main: boolean
|
||||||
|
sub: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
// JobAccessory entity
|
||||||
|
export interface JobAccessory {
|
||||||
|
id: string
|
||||||
|
name: LocalizedName
|
||||||
|
slug: string
|
||||||
|
granblueId: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Raid entity from RaidBlueprint
|
||||||
|
export interface Raid {
|
||||||
|
id: string
|
||||||
|
slug: string
|
||||||
|
name: LocalizedName
|
||||||
|
level: number
|
||||||
|
element: number
|
||||||
|
group?: RaidGroup
|
||||||
|
}
|
||||||
|
|
||||||
|
// RaidGroup entity from RaidGroupBlueprint
|
||||||
|
export interface RaidGroup {
|
||||||
|
id: string
|
||||||
|
name: LocalizedName
|
||||||
|
section: string
|
||||||
|
order: number
|
||||||
|
difficulty: number
|
||||||
|
hl: boolean
|
||||||
|
extra: boolean
|
||||||
|
guidebooks: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
// Awakening entity
|
||||||
|
export interface Awakening {
|
||||||
|
id: string
|
||||||
|
name: LocalizedName
|
||||||
|
slug: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// WeaponKey entity
|
||||||
|
export interface WeaponKey {
|
||||||
|
id: string
|
||||||
|
name: LocalizedName
|
||||||
|
slug: string
|
||||||
|
keyType: string
|
||||||
|
slot: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// SimpleAxSkill for weapon AX skills
|
||||||
|
export interface SimpleAxSkill {
|
||||||
|
modifier: number
|
||||||
|
strength: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// Guidebook entity
|
||||||
|
export interface Guidebook {
|
||||||
|
id: string
|
||||||
|
name: LocalizedName
|
||||||
|
slug: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// User entity
|
||||||
|
export interface User {
|
||||||
|
id: string
|
||||||
|
username: string
|
||||||
|
profilePicture?: string
|
||||||
|
role?: string
|
||||||
|
createdAt?: string
|
||||||
|
updatedAt?: string
|
||||||
|
}
|
||||||
168
src/lib/types/api/party.ts
Normal file
168
src/lib/types/api/party.ts
Normal file
|
|
@ -0,0 +1,168 @@
|
||||||
|
// Party and Grid types based on Rails blueprints
|
||||||
|
// These define the party composition structure
|
||||||
|
|
||||||
|
import type {
|
||||||
|
Weapon,
|
||||||
|
Character,
|
||||||
|
Summon,
|
||||||
|
Job,
|
||||||
|
JobSkill,
|
||||||
|
JobAccessory,
|
||||||
|
Raid,
|
||||||
|
Guidebook,
|
||||||
|
User,
|
||||||
|
Awakening,
|
||||||
|
WeaponKey,
|
||||||
|
SimpleAxSkill
|
||||||
|
} from './entities'
|
||||||
|
|
||||||
|
// Grid item types - these are the junction tables between Party and entities
|
||||||
|
|
||||||
|
// GridWeapon from GridWeaponBlueprint
|
||||||
|
export interface GridWeapon {
|
||||||
|
id: string
|
||||||
|
position: number
|
||||||
|
mainhand?: boolean
|
||||||
|
uncapLevel?: number
|
||||||
|
transcendenceStep?: number
|
||||||
|
element?: number
|
||||||
|
weapon: Weapon // Named properly, not "object"
|
||||||
|
weaponKeys?: WeaponKey[]
|
||||||
|
ax?: SimpleAxSkill[]
|
||||||
|
awakening?: {
|
||||||
|
type: Awakening
|
||||||
|
level: number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GridCharacter from GridCharacterBlueprint
|
||||||
|
export interface GridCharacter {
|
||||||
|
id: string
|
||||||
|
position: number
|
||||||
|
uncapLevel?: number
|
||||||
|
perpetuity?: boolean
|
||||||
|
transcendenceStep?: number
|
||||||
|
character: Character // Named properly, not "object"
|
||||||
|
awakening?: Awakening
|
||||||
|
rings?: Array<{ modifier: number; strength: number }>
|
||||||
|
earring?: { modifier: number; strength: number }
|
||||||
|
aetherial_mastery?: { modifier: number; strength: number }
|
||||||
|
over_mastery?: Array<{ modifier: number; strength: number }>
|
||||||
|
}
|
||||||
|
|
||||||
|
// GridSummon from GridSummonBlueprint
|
||||||
|
export interface GridSummon {
|
||||||
|
id: string
|
||||||
|
position: number
|
||||||
|
main?: boolean
|
||||||
|
friend?: boolean
|
||||||
|
quickSummon?: boolean
|
||||||
|
uncapLevel?: number
|
||||||
|
transcendenceStep?: number
|
||||||
|
summon: Summon // Named properly, not "object"
|
||||||
|
}
|
||||||
|
|
||||||
|
// JobSkillList for party job skills
|
||||||
|
export interface JobSkillList {
|
||||||
|
0?: JobSkill
|
||||||
|
1?: JobSkill
|
||||||
|
2?: JobSkill
|
||||||
|
3?: JobSkill
|
||||||
|
}
|
||||||
|
|
||||||
|
// GuidebookList for party guidebooks
|
||||||
|
export interface GuidebookList {
|
||||||
|
0?: Guidebook
|
||||||
|
1?: Guidebook
|
||||||
|
2?: Guidebook
|
||||||
|
}
|
||||||
|
|
||||||
|
// Party from PartyBlueprint
|
||||||
|
export interface Party {
|
||||||
|
id: string
|
||||||
|
shortcode: string
|
||||||
|
name?: string
|
||||||
|
description?: string
|
||||||
|
fullAuto?: boolean
|
||||||
|
autoGuard?: boolean
|
||||||
|
autoSummon?: boolean
|
||||||
|
chargeAttack?: boolean
|
||||||
|
clearTime?: number
|
||||||
|
buttonCount?: number
|
||||||
|
turnCount?: number
|
||||||
|
chainCount?: number
|
||||||
|
visibility?: number
|
||||||
|
favorited?: boolean
|
||||||
|
extra?: boolean
|
||||||
|
remix?: boolean
|
||||||
|
|
||||||
|
// Relationships
|
||||||
|
weapons: GridWeapon[]
|
||||||
|
characters: GridCharacter[]
|
||||||
|
summons: GridSummon[]
|
||||||
|
job?: Job
|
||||||
|
jobSkills?: JobSkillList
|
||||||
|
accessory?: JobAccessory
|
||||||
|
raid?: Raid
|
||||||
|
guidebooks?: GuidebookList
|
||||||
|
user?: User
|
||||||
|
sourceParty?: Party
|
||||||
|
remixes?: Party[]
|
||||||
|
|
||||||
|
// Local client state
|
||||||
|
localId?: string
|
||||||
|
|
||||||
|
// Timestamps
|
||||||
|
createdAt?: string
|
||||||
|
updatedAt?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Minimal party for list views
|
||||||
|
export interface PartyPreview {
|
||||||
|
id: string
|
||||||
|
shortcode: string
|
||||||
|
name?: string
|
||||||
|
favorited?: boolean
|
||||||
|
visibility?: number
|
||||||
|
raid?: {
|
||||||
|
name: { en: string; ja: string }
|
||||||
|
group?: {
|
||||||
|
difficulty?: number
|
||||||
|
extra?: boolean
|
||||||
|
guidebooks?: boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
job?: {
|
||||||
|
name: { en: string; ja: string }
|
||||||
|
}
|
||||||
|
weapons: Array<{
|
||||||
|
position: number
|
||||||
|
mainhand?: boolean
|
||||||
|
weapon: {
|
||||||
|
granblueId: number
|
||||||
|
name?: { en: string; ja: string }
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
characters: Array<{
|
||||||
|
position: number
|
||||||
|
character: {
|
||||||
|
granblueId: number
|
||||||
|
name?: { en: string; ja: string }
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
summons: Array<{
|
||||||
|
position: number
|
||||||
|
main?: boolean
|
||||||
|
friend?: boolean
|
||||||
|
summon: {
|
||||||
|
granblueId: number
|
||||||
|
name?: { en: string; ja: string }
|
||||||
|
}
|
||||||
|
}>
|
||||||
|
user?: {
|
||||||
|
id: string
|
||||||
|
username: string
|
||||||
|
}
|
||||||
|
createdAt?: string
|
||||||
|
updatedAt?: string
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue