feat(front): aligner api platform et sessions [INV-20260111-02]

This commit is contained in:
2026-01-11 17:14:24 +01:00
parent 936a73fde3
commit e99f053233
17 changed files with 346 additions and 67 deletions

View File

@@ -3,6 +3,7 @@ import { useToast } from './useToast'
import { useApi } from './useApi'
import { buildConstructeurRequestPayload, uniqueConstructeurIds } from '~/shared/constructeurUtils'
import { useConstructeurs } from './useConstructeurs'
import { extractRelationId, normalizeRelationIds } from '~/shared/apiRelations'
const products = ref([])
const total = ref(0)
@@ -25,6 +26,22 @@ const replaceInCache = (item) => {
return false
}
const extractCollection = (payload) => {
if (Array.isArray(payload)) {
return payload
}
if (Array.isArray(payload?.member)) {
return payload.member
}
if (Array.isArray(payload?.['hydra:member'])) {
return payload['hydra:member']
}
if (Array.isArray(payload?.data)) {
return payload.data
}
return []
}
export function useProducts () {
const { showError } = useToast()
const { get, post, patch, delete: del } = useApi()
@@ -34,6 +51,12 @@ export function useProducts () {
if (!product || typeof product !== 'object') {
return product
}
if (!product.typeProductId) {
const typeProductId = extractRelationId(product.typeProduct)
if (typeProductId) {
product.typeProductId = typeProductId
}
}
const ids = uniqueConstructeurIds(
product.constructeurIds,
product.constructeurs,
@@ -69,12 +92,14 @@ export function useProducts () {
loading.value = true
error.value = null
try {
const result = await get('/products?limit=100')
const result = await get('/products?itemsPerPage=100')
if (result.success) {
const items = Array.isArray(result.data?.items) ? result.data.items : []
const items = extractCollection(result.data)
const enrichedItems = await Promise.all(items.map((item) => withResolvedConstructeurs(item)))
products.value = enrichedItems
total.value = typeof result.data?.total === 'number' ? result.data.total : items.length
total.value = typeof result.data?.totalItems === 'number'
? result.data.totalItems
: items.length
loaded.value = true
} else if (result.error) {
error.value = result.error
@@ -93,7 +118,7 @@ export function useProducts () {
}
const createProduct = async (payload) => {
const normalizedPayload = buildConstructeurRequestPayload(payload)
const normalizedPayload = normalizeRelationIds(buildConstructeurRequestPayload(payload))
loading.value = true
error.value = null
try {
@@ -121,7 +146,7 @@ export function useProducts () {
}
const updateProduct = async (id, payload) => {
const normalizedPayload = buildConstructeurRequestPayload(payload)
const normalizedPayload = normalizeRelationIds(buildConstructeurRequestPayload(payload))
loading.value = true
error.value = null
try {