generated from gilles/template-webapp
84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
/**
|
|
* API pour les objets d'inventaire
|
|
*/
|
|
|
|
import { apiClient, PaginatedResponse, SuccessResponse } from './client'
|
|
import { Item, ItemCreate, ItemFilter, ItemStatus, ItemUpdate, ItemWithRelations } from './types'
|
|
|
|
export const itemsApi = {
|
|
/**
|
|
* Liste tous les objets avec filtres
|
|
*/
|
|
async getAll(
|
|
page = 1,
|
|
pageSize = 20,
|
|
filters?: ItemFilter
|
|
): Promise<PaginatedResponse<ItemWithRelations>> {
|
|
const response = await apiClient.get<PaginatedResponse<ItemWithRelations>>('/items', {
|
|
params: {
|
|
page,
|
|
page_size: pageSize,
|
|
search: filters?.search,
|
|
category_id: filters?.category_id,
|
|
location_id: filters?.location_id,
|
|
status: filters?.status,
|
|
min_price: filters?.min_price,
|
|
max_price: filters?.max_price,
|
|
},
|
|
})
|
|
return response.data
|
|
},
|
|
|
|
/**
|
|
* Récupère un objet par son ID
|
|
*/
|
|
async getById(id: number): Promise<ItemWithRelations> {
|
|
const response = await apiClient.get<ItemWithRelations>(`/items/${id}`)
|
|
return response.data
|
|
},
|
|
|
|
/**
|
|
* Crée un nouvel objet
|
|
*/
|
|
async create(data: ItemCreate): Promise<Item> {
|
|
const response = await apiClient.post<Item>('/items', data)
|
|
return response.data
|
|
},
|
|
|
|
/**
|
|
* Met à jour un objet
|
|
*/
|
|
async update(id: number, data: ItemUpdate): Promise<Item> {
|
|
const response = await apiClient.put<Item>(`/items/${id}`, data)
|
|
return response.data
|
|
},
|
|
|
|
/**
|
|
* Supprime un objet
|
|
*/
|
|
async delete(id: number): Promise<SuccessResponse> {
|
|
const response = await apiClient.delete<SuccessResponse>(`/items/${id}`)
|
|
return response.data
|
|
},
|
|
|
|
/**
|
|
* Change le statut d'un objet
|
|
*/
|
|
async updateStatus(id: number, status: ItemStatus): Promise<Item> {
|
|
const response = await apiClient.patch<Item>(`/items/${id}/status`, null, {
|
|
params: { new_status: status },
|
|
})
|
|
return response.data
|
|
},
|
|
|
|
/**
|
|
* Déplace un objet vers un nouvel emplacement
|
|
*/
|
|
async move(id: number, locationId: number): Promise<Item> {
|
|
const response = await apiClient.patch<Item>(`/items/${id}/location`, null, {
|
|
params: { new_location_id: locationId },
|
|
})
|
|
return response.data
|
|
},
|
|
}
|