62 lines
1.9 KiB
TypeScript
62 lines
1.9 KiB
TypeScript
/**
|
|
* EXHIBITION: typed API client for show/exhibition results & awards per animal
|
|
* (RennmausPro `ausz_tb`). Backend: GET /exhibitions[?gerbilId=], POST, PUT, DELETE.
|
|
* Decoupled from gerbils (loose nullable gerbilId, no FK) — rows survive the import wipe.
|
|
*/
|
|
import { api } from './client'
|
|
import type { DateOnlyString } from './types'
|
|
|
|
const RESOURCE = '/exhibitions'
|
|
|
|
export interface ExhibitionResult {
|
|
id: string
|
|
gerbilId: string | null
|
|
entityName: string | null
|
|
eventName: string
|
|
/** ISO date-time string (backend DateTime?), or null. */
|
|
date: DateOnlyString | string | null
|
|
placement: string | null
|
|
award: string | null
|
|
note: string | null
|
|
createdAt: string
|
|
}
|
|
|
|
/** Payload for POST /exhibitions. */
|
|
export interface CreateExhibitionResult {
|
|
gerbilId?: string | null
|
|
entityName?: string | null
|
|
eventName: string
|
|
date?: string | null
|
|
placement?: string | null
|
|
award?: string | null
|
|
note?: string | null
|
|
}
|
|
|
|
/** Payload for PUT /exhibitions/{id} (partial). */
|
|
export type UpdateExhibitionResult = Partial<CreateExhibitionResult>
|
|
|
|
/** Alle Ergebnisse eines Tieres (Backend sortiert neueste zuerst). */
|
|
export function listExhibitionResults(gerbilId: string): Promise<ExhibitionResult[]> {
|
|
return api.get<ExhibitionResult[]>(`${RESOURCE}?gerbilId=${encodeURIComponent(gerbilId)}`)
|
|
}
|
|
|
|
/** Alle Ergebnisse (ungefiltert), für eine künftige Gesamtübersicht. */
|
|
export function listAllExhibitionResults(): Promise<ExhibitionResult[]> {
|
|
return api.get<ExhibitionResult[]>(RESOURCE)
|
|
}
|
|
|
|
export function createExhibitionResult(body: CreateExhibitionResult): Promise<ExhibitionResult> {
|
|
return api.post<ExhibitionResult>(RESOURCE, body)
|
|
}
|
|
|
|
export function updateExhibitionResult(
|
|
id: string,
|
|
body: UpdateExhibitionResult,
|
|
): Promise<ExhibitionResult> {
|
|
return api.put<ExhibitionResult>(`${RESOURCE}/${id}`, body)
|
|
}
|
|
|
|
export function deleteExhibitionResult(id: string): Promise<void> {
|
|
return api.delete(`${RESOURCE}/${id}`)
|
|
}
|