Files
GerbilManager/gerbil-manager-web/src/api/contracts.ts

43 lines
1.3 KiB
TypeScript

/** FEAT-13: Abgabeverträge (/contracts). */
import { API_BASE_URL, api, resources } from './client'
import { toQueryString, type GridifyQuery } from './gridify'
import type { DateOnlyString, Paged } from './types'
export interface SaleContract {
id: string
contactId: string
price: number
handoverDate: DateOnlyString
contractDate: DateOnlyString
fileName: string
createdAt: string
gerbilIds: string[]
/** API-relativer Download-Pfad ("/contracts/{id}/file"). */
url: string
}
export interface CreateSaleContract {
contactId: string
gerbilIds: string[]
price: number
handoverDate: DateOnlyString
contractDate?: DateOnlyString | null
}
export function listContracts(query: GridifyQuery): Promise<Paged<SaleContract>> {
return api.get<Paged<SaleContract>>(`${resources.contracts}${toQueryString(query)}`)
}
export function createContract(body: CreateSaleContract): Promise<SaleContract> {
return api.post<SaleContract>(resources.contracts, body)
}
export function deleteContract(id: string): Promise<void> {
return api.delete(`${resources.contracts}/${id}`)
}
/** Absolute Download-URL der .docx (für <a href> / window.open). */
export function contractFileUrl(contract: Pick<SaleContract, 'url'>): string {
return `${API_BASE_URL}${contract.url}`
}