58589e93d0
Auto Tag Develop / tag (push) Successful in 6s
Lien Lesstime : #50 ## Résumé Refacto : extraction de la logique fetch/CRUD inline de la page categories (ERP-49) vers deux composables dédiés, conformément au pattern Starseed (useSidebar / useModules). - **useCategoriesAdmin** : singleton state (`categories` + `types` + `loading` + `error`). Pré-chargement des types au mount de la page (au lieu d'un fetch par ouverture du drawer). Reset au logout via `onAuthSessionCleared` + appel explicite dans `logout.vue`. - **useCategoryForm** : state local par form (pas singleton, contrairement à `useCategoriesAdmin`). Valide côté client en miroir des RG back (RG-1.02 / RG-1.04 / RG-1.05), mappe les erreurs 409 (RG-1.07 doublon) et 422 (violations API Platform) sur les bons champs. `submitCreate` / `submitUpdate` / `submitDelete` renvoient la ressource ou `null` pour découpler la décision de fermeture du drawer. La page et le drawer deviennent purement présentationnels — aucune régression UX attendue (mêmes validations, mêmes toasts, même bascule view → edit via `isDirty` exposé par le composable). ## Décisions - `useCategoriesAdmin` porte aussi les types (`fetchTypes`), pas seulement `categories` — sinon le drawer continuerait à fetcher tout seul et la refacto n'aurait rien centralisé. - `buildCreatePayload` retourne `Record<string, unknown>` (pas `CategoryCreateInput`) car la signature `useApi.post(body: AnyObject)` n'accepte pas les types stricts (variance TS). - Reset au logout : double mécanisme conservé (auto via `onAuthSessionCleared` pour 401, explicite dans `logout.vue` pour logout volontaire — pattern existant Starseed). ## Tests - `npx nuxi typecheck` ✓ 0 erreur nouvelle (1 erreur pré-existante sur `modules/catalog/nuxt.config.ts` héritée d'ERP-49) - `make nuxt-test` ✓ 43/43, 0 régression - PHPUnit ✓ 311/311 (pre-commit) - Manuel navigateur : à valider (cahier de test consigné dans Lesstime #50) ## ⚠ Note d'intégration La branche contient encore les 3 commits ERP-49 (`4046910`, `216f388`, `934a12b`) car elle a été créée depuis la branche ERP-49 avant son merge sur develop. Selon l'ordre de merge : soit ERP-49 est mergée d'abord (cette MR ne contiendra plus que le commit ERP-50 après rebase auto), soit cette MR embarque tout l'historique catalog. Reviewed-on: #25 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
36 lines
1.1 KiB
Vue
36 lines
1.1 KiB
Vue
<template>
|
|
<div class="flex h-full items-center justify-center">
|
|
<p class="text-neutral-500">{{ $t('auth.logout') }}...</p>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
definePageMeta({ layout: 'auth' })
|
|
|
|
const auth = useAuthStore()
|
|
const { resetSidebar } = useSidebar()
|
|
const { resetModules } = useModules()
|
|
const { resetCurrentSite } = useCurrentSite()
|
|
const { resetAuditLog } = useAuditLog()
|
|
const { resetCategoriesAdmin } = useCategoriesAdmin()
|
|
|
|
onMounted(async () => {
|
|
try {
|
|
await auth.logout()
|
|
} finally {
|
|
// Les resets sont garantis meme si auth.logout() rejette : eviter
|
|
// qu'un user suivant (connecte sur le meme onglet) voie l'etat de
|
|
// l'ancien. Toutes les fonctions reset sont synchrones et ne
|
|
// peuvent pas throw (juste des assignations reactives).
|
|
// navigateTo est dans le finally pour garantir la redirection
|
|
// meme si auth.logout() lance une exception (ex: reseau coupé).
|
|
resetSidebar()
|
|
resetModules()
|
|
resetCurrentSite()
|
|
resetAuditLog()
|
|
resetCategoriesAdmin()
|
|
await navigateTo('/login')
|
|
}
|
|
})
|
|
</script>
|