add WeaponSeriesRef type definitions
This commit is contained in:
parent
a580f179e1
commit
58d8899075
1 changed files with 104 additions and 0 deletions
104
src/lib/types/api/weaponSeries.ts
Normal file
104
src/lib/types/api/weaponSeries.ts
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
/**
|
||||
* Weapon Series Types
|
||||
*
|
||||
* Type definitions for weapon series data from the API.
|
||||
* WeaponSeries is a database-driven classification system for weapons.
|
||||
*
|
||||
* @module types/api/weaponSeries
|
||||
*/
|
||||
|
||||
/**
|
||||
* Embedded series reference on weapons.
|
||||
* This is the structure returned in weapon.series field.
|
||||
* Includes boolean flags for convenience to avoid extra lookups.
|
||||
*/
|
||||
export interface WeaponSeriesRef {
|
||||
id: string
|
||||
slug: string
|
||||
name: { en: string; ja: string }
|
||||
hasWeaponKeys: boolean
|
||||
hasAwakening: boolean
|
||||
hasAxSkills: boolean
|
||||
extra: boolean
|
||||
elementChangeable: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Full weapon series from /api/v1/weapon_series endpoint.
|
||||
* The list endpoint returns a minimal view, while the show endpoint returns the full view.
|
||||
*/
|
||||
export interface WeaponSeries {
|
||||
id: string
|
||||
name: { en: string; ja: string }
|
||||
slug: string
|
||||
order: number
|
||||
// Only included in :full view (show endpoint)
|
||||
extra?: boolean
|
||||
elementChangeable?: boolean
|
||||
hasWeaponKeys?: boolean
|
||||
hasAwakening?: boolean
|
||||
hasAxSkills?: boolean
|
||||
weaponCount?: number
|
||||
}
|
||||
|
||||
/**
|
||||
* Input type for weapon series form (client-side)
|
||||
*/
|
||||
export interface WeaponSeriesInput {
|
||||
name_en: string
|
||||
name_jp: string
|
||||
slug: string
|
||||
order: number
|
||||
extra: boolean
|
||||
element_changeable: boolean
|
||||
has_weapon_keys: boolean
|
||||
has_awakening: boolean
|
||||
has_ax_skills: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Payload for creating a new weapon series (editor only)
|
||||
*/
|
||||
export interface CreateWeaponSeriesPayload {
|
||||
name_en: string
|
||||
name_jp: string
|
||||
slug: string
|
||||
order?: number
|
||||
extra?: boolean
|
||||
element_changeable?: boolean
|
||||
has_weapon_keys?: boolean
|
||||
has_awakening?: boolean
|
||||
has_ax_skills?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Payload for updating an existing weapon series (editor only)
|
||||
*/
|
||||
export interface UpdateWeaponSeriesPayload {
|
||||
name_en?: string
|
||||
name_jp?: string
|
||||
slug?: string
|
||||
order?: number
|
||||
extra?: boolean
|
||||
element_changeable?: boolean
|
||||
has_weapon_keys?: boolean
|
||||
has_awakening?: boolean
|
||||
has_ax_skills?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Type guard to check if a series value is the new object format vs legacy integer.
|
||||
* During migration, some weapons may still have integer series values.
|
||||
*
|
||||
* @param series - The series value to check
|
||||
* @returns True if series is a WeaponSeriesRef object
|
||||
*/
|
||||
export function isWeaponSeriesRef(series: unknown): series is WeaponSeriesRef {
|
||||
return (
|
||||
series !== null &&
|
||||
typeof series === 'object' &&
|
||||
'slug' in series &&
|
||||
'id' in series &&
|
||||
'name' in series
|
||||
)
|
||||
}
|
||||
Loading…
Reference in a new issue