entity adapter: add summon creation methods
- SummonValidationResult, CreateSummonPayload, SummonDownloadStatus types - validateSummonGranblueId(), createSummon(), downloadSummonImages(), getSummonDownloadStatus() - Matches character creation pattern 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
fbe43490d7
commit
4973643ee6
1 changed files with 159 additions and 0 deletions
|
|
@ -257,6 +257,76 @@ export interface CharacterDownloadStatus {
|
||||||
updatedAt?: string
|
updatedAt?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response from summon granblue_id validation
|
||||||
|
*/
|
||||||
|
export interface SummonValidationResult {
|
||||||
|
valid: boolean
|
||||||
|
granblueId: string
|
||||||
|
existsInDb: boolean
|
||||||
|
error?: string
|
||||||
|
imageUrls?: {
|
||||||
|
main?: string
|
||||||
|
grid?: string
|
||||||
|
square?: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Payload for creating a new summon
|
||||||
|
* Note: Frontend uses "transcendence" but API expects "xlb" for stats
|
||||||
|
*/
|
||||||
|
export interface CreateSummonPayload {
|
||||||
|
granblue_id: string
|
||||||
|
name_en: string
|
||||||
|
name_jp?: string
|
||||||
|
summon_id?: string
|
||||||
|
rarity?: number
|
||||||
|
element?: number
|
||||||
|
series?: string
|
||||||
|
min_hp?: number
|
||||||
|
max_hp?: number
|
||||||
|
max_hp_flb?: number
|
||||||
|
max_hp_ulb?: number
|
||||||
|
max_hp_xlb?: number // transcendence HP
|
||||||
|
min_atk?: number
|
||||||
|
max_atk?: number
|
||||||
|
max_atk_flb?: number
|
||||||
|
max_atk_ulb?: number
|
||||||
|
max_atk_xlb?: number // transcendence ATK
|
||||||
|
max_level?: number
|
||||||
|
flb?: boolean
|
||||||
|
ulb?: boolean
|
||||||
|
transcendence?: boolean
|
||||||
|
subaura?: boolean
|
||||||
|
limit?: boolean
|
||||||
|
release_date?: string | null
|
||||||
|
flb_date?: string | null
|
||||||
|
ulb_date?: string | null
|
||||||
|
transcendence_date?: string | null
|
||||||
|
wiki_en?: string
|
||||||
|
wiki_ja?: string
|
||||||
|
gamewith?: string
|
||||||
|
kamigame?: string
|
||||||
|
nicknames_en?: string[]
|
||||||
|
nicknames_jp?: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response from summon image download status
|
||||||
|
*/
|
||||||
|
export interface SummonDownloadStatus {
|
||||||
|
status: 'queued' | 'processing' | 'completed' | 'failed' | 'not_found'
|
||||||
|
progress?: number
|
||||||
|
imagesDownloaded?: number
|
||||||
|
imagesTotal?: number
|
||||||
|
error?: string
|
||||||
|
summonId?: string
|
||||||
|
granblueId?: string
|
||||||
|
images?: Record<string, string[]>
|
||||||
|
updatedAt?: string
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Entity adapter for accessing canonical game data
|
* Entity adapter for accessing canonical game data
|
||||||
*/
|
*/
|
||||||
|
|
@ -448,6 +518,95 @@ export class EntityAdapter extends BaseAdapter {
|
||||||
updatedAt: response.updated_at
|
updatedAt: response.updated_at
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// Summon Creation & Image Download Methods
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates a summon granblue_id by checking if images exist on GBF servers
|
||||||
|
* Requires editor role (>= 7)
|
||||||
|
*/
|
||||||
|
async validateSummonGranblueId(granblueId: string): Promise<SummonValidationResult> {
|
||||||
|
const response = await this.request<{
|
||||||
|
valid: boolean
|
||||||
|
granblue_id: string
|
||||||
|
exists_in_db: boolean
|
||||||
|
error?: string
|
||||||
|
image_urls?: {
|
||||||
|
main?: string
|
||||||
|
grid?: string
|
||||||
|
square?: string
|
||||||
|
}
|
||||||
|
}>(`/summons/validate/${granblueId}`, {
|
||||||
|
method: 'GET'
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
valid: response.valid,
|
||||||
|
granblueId: response.granblue_id,
|
||||||
|
existsInDb: response.exists_in_db,
|
||||||
|
error: response.error,
|
||||||
|
imageUrls: response.image_urls
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new summon record
|
||||||
|
* Requires editor role (>= 7)
|
||||||
|
*/
|
||||||
|
async createSummon(payload: CreateSummonPayload): Promise<Summon> {
|
||||||
|
return this.request<Summon>('/summons', {
|
||||||
|
method: 'POST',
|
||||||
|
body: { summon: payload }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Triggers async image download for a summon
|
||||||
|
* Requires editor role (>= 7)
|
||||||
|
*/
|
||||||
|
async downloadSummonImages(
|
||||||
|
summonId: string,
|
||||||
|
options?: { force?: boolean; size?: 'all' | string }
|
||||||
|
): Promise<{ status: string; summonId: string; message: string }> {
|
||||||
|
return this.request(`/summons/${summonId}/download_images`, {
|
||||||
|
method: 'POST',
|
||||||
|
body: { options }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the status of an ongoing summon image download
|
||||||
|
* Requires editor role (>= 7)
|
||||||
|
*/
|
||||||
|
async getSummonDownloadStatus(summonId: string): Promise<SummonDownloadStatus> {
|
||||||
|
const response = await this.request<{
|
||||||
|
status: string
|
||||||
|
progress?: number
|
||||||
|
images_downloaded?: number
|
||||||
|
images_total?: number
|
||||||
|
error?: string
|
||||||
|
summon_id?: string
|
||||||
|
granblue_id?: string
|
||||||
|
images?: Record<string, string[]>
|
||||||
|
updated_at?: string
|
||||||
|
}>(`/summons/${summonId}/download_status`, {
|
||||||
|
method: 'GET'
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
status: response.status as SummonDownloadStatus['status'],
|
||||||
|
progress: response.progress,
|
||||||
|
imagesDownloaded: response.images_downloaded,
|
||||||
|
imagesTotal: response.images_total,
|
||||||
|
error: response.error,
|
||||||
|
summonId: response.summon_id,
|
||||||
|
granblueId: response.granblue_id,
|
||||||
|
images: response.images,
|
||||||
|
updatedAt: response.updated_at
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue