Files
home_stock/frontend/src/api/items.ts
2026-01-28 19:22:30 +01:00

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
},
}