Add API type definitions

This commit is contained in:
Justin Edmund 2025-09-15 04:04:39 -07:00
parent 1b6da60aa3
commit e8fa1545f8
2 changed files with 342 additions and 0 deletions

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