Files
Ferme/frontend/services/bovine-type.ts
2026-02-17 11:20:20 +01:00

68 lines
2.1 KiB
TypeScript

import { useApi } from '~/composables/useApi'
import type { BovineTypeData, BovinData, BovinPayload } from "~/services/dto/bovine-type-data";
export type BovineTypeListResponse =
| BovineTypeData[]
| { 'hydra:member'?: BovineTypeData[] }
export async function getBovineTypeList(): Promise<BovineTypeData[]> {
const api = useApi()
const response = await api.get<BovineTypeListResponse>('bovine_types', {}, {
toastErrorKey: 'errors.bovin.list'
})
if (Array.isArray(response)) {
return response
}
if (response && typeof response === 'object' && Array.isArray(response['hydra:member'])) {
return response['hydra:member']
}
return []
}
export async function getBovinList(): Promise<BovinData[]> {
const api = useApi()
const response = await api.get<BovineTypeListResponse>('bovine_types', {}, {
toastErrorKey: 'errors.bovin.list'
})
const items = Array.isArray(response)
? response
: response && typeof response === 'object' && Array.isArray(response['hydra:member'])
? response['hydra:member']
: []
return items.map(mapToBovinData)
}
export async function getBovin(id: number): Promise<BovinData> {
const api = useApi()
const response = await api.get<BovineTypeData>(`bovine_types/${id}`)
return mapToBovinData(response)
}
export async function createBovin(payload: BovinPayload = {}): Promise<BovinData> {
const api = useApi()
const response = await api.post<BovineTypeData>('bovine_types', toBovineTypePayload(payload))
return mapToBovinData(response)
}
export async function updateBovin(id: number, payload: BovinPayload = {}): Promise<BovinData> {
const api = useApi()
const response = await api.patch<BovineTypeData>(`bovine_types/${id}`, toBovineTypePayload(payload))
return mapToBovinData(response)
}
const mapToBovinData = (item: BovineTypeData): BovinData => ({
id: item.id,
name: item.label,
code: item.code
})
const toBovineTypePayload = (payload: BovinPayload): Partial<BovineTypeData> => ({
label: payload.name ?? undefined,
code: payload.code ?? undefined
})