api: update entity adapter and queries
This commit is contained in:
parent
db5bfe9f7f
commit
c3ed9b2885
2 changed files with 64 additions and 3 deletions
|
|
@ -110,6 +110,32 @@ export interface Character {
|
||||||
}>
|
}>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Weapon key data for customizing weapons
|
||||||
|
*/
|
||||||
|
export interface WeaponKey {
|
||||||
|
id: string
|
||||||
|
granblue_id: number
|
||||||
|
name: {
|
||||||
|
en: string
|
||||||
|
ja: string
|
||||||
|
}
|
||||||
|
slug: string
|
||||||
|
series: number[]
|
||||||
|
slot: number
|
||||||
|
group: number
|
||||||
|
order: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query parameters for fetching weapon keys
|
||||||
|
*/
|
||||||
|
export interface WeaponKeyQueryParams {
|
||||||
|
series?: number
|
||||||
|
slot?: number
|
||||||
|
group?: number
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Canonical summon data from the game
|
* Canonical summon data from the game
|
||||||
*/
|
*/
|
||||||
|
|
@ -232,10 +258,28 @@ export class EntityAdapter extends BaseAdapter {
|
||||||
return Promise.all(promises)
|
return Promise.all(promises)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets weapon keys with optional filtering
|
||||||
|
*/
|
||||||
|
async getWeaponKeys(params?: WeaponKeyQueryParams): Promise<WeaponKey[]> {
|
||||||
|
const searchParams = new URLSearchParams()
|
||||||
|
if (params?.series !== undefined) searchParams.set('series', String(params.series))
|
||||||
|
if (params?.slot !== undefined) searchParams.set('slot', String(params.slot))
|
||||||
|
if (params?.group !== undefined) searchParams.set('group', String(params.group))
|
||||||
|
|
||||||
|
const queryString = searchParams.toString()
|
||||||
|
const url = queryString ? `/weapon_keys?${queryString}` : '/weapon_keys'
|
||||||
|
|
||||||
|
return this.request<WeaponKey[]>(url, {
|
||||||
|
method: 'GET',
|
||||||
|
cacheTTL: 3600000 // Cache for 1 hour - weapon keys rarely change
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears entity cache
|
* Clears entity cache
|
||||||
*/
|
*/
|
||||||
clearEntityCache(type?: 'weapons' | 'characters' | 'summons') {
|
clearEntityCache(type?: 'weapons' | 'characters' | 'summons' | 'weapon_keys') {
|
||||||
if (type) {
|
if (type) {
|
||||||
this.clearCache(`/${type}`)
|
this.clearCache(`/${type}`)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -243,6 +287,7 @@ export class EntityAdapter extends BaseAdapter {
|
||||||
this.clearCache('/weapons')
|
this.clearCache('/weapons')
|
||||||
this.clearCache('/characters')
|
this.clearCache('/characters')
|
||||||
this.clearCache('/summons')
|
this.clearCache('/summons')
|
||||||
|
this.clearCache('/weapon_keys')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { queryOptions } from '@tanstack/svelte-query'
|
import { queryOptions } from '@tanstack/svelte-query'
|
||||||
import { entityAdapter } from '$lib/api/adapters/entity.adapter'
|
import { entityAdapter, type WeaponKeyQueryParams } from '$lib/api/adapters/entity.adapter'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entity query options factory
|
* Entity query options factory
|
||||||
|
|
@ -72,6 +72,20 @@ export const entityQueries = {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
staleTime: 1000 * 60 * 60, // 1 hour - canonical data rarely changes
|
staleTime: 1000 * 60 * 60, // 1 hour - canonical data rarely changes
|
||||||
gcTime: 1000 * 60 * 60 * 24 // 24 hours
|
gcTime: 1000 * 60 * 60 * 24 // 24 hours
|
||||||
|
}),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Weapon keys query options with optional filtering
|
||||||
|
*
|
||||||
|
* @param params - Optional filter parameters (series, slot, group)
|
||||||
|
* @returns Query options for fetching weapon keys
|
||||||
|
*/
|
||||||
|
weaponKeys: (params?: WeaponKeyQueryParams) =>
|
||||||
|
queryOptions({
|
||||||
|
queryKey: ['weaponKeys', params?.series, params?.slot, params?.group] as const,
|
||||||
|
queryFn: () => entityAdapter.getWeaponKeys(params),
|
||||||
|
staleTime: 1000 * 60 * 60, // 1 hour - weapon keys rarely change
|
||||||
|
gcTime: 1000 * 60 * 60 * 24 // 24 hours
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,5 +112,7 @@ export const entityKeys = {
|
||||||
characters: () => ['character'] as const,
|
characters: () => ['character'] as const,
|
||||||
character: (id: string) => [...entityKeys.characters(), id] as const,
|
character: (id: string) => [...entityKeys.characters(), id] as const,
|
||||||
summons: () => ['summon'] as const,
|
summons: () => ['summon'] as const,
|
||||||
summon: (id: string) => [...entityKeys.summons(), id] as const
|
summon: (id: string) => [...entityKeys.summons(), id] as const,
|
||||||
|
weaponKeys: (params?: WeaponKeyQueryParams) =>
|
||||||
|
['weaponKeys', params?.series, params?.slot, params?.group] as const
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue