From e85ea42d7cbb0a1e537e81ed4db64b52767f100a Mon Sep 17 00:00:00 2001 From: Matthieu Date: Fri, 13 Mar 2026 12:06:35 +0100 Subject: [PATCH] docs : update CLAUDE.md structure and fix spec formatting Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 10 +++++----- .../specs/2026-03-12-task-archiving-design.md | 9 ++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 978c9d8..1b267ab 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,9 +12,9 @@ Application de gestion de projet. Monorepo Symfony 8 (API Platform 4) + Nuxt 4. ## Structure ``` -src/Entity/ # Entités Doctrine (User, Client, Project, Task, TaskStatus, TaskEffort, TaskPriority, TaskType, TaskGroup, TimeEntry) +src/Entity/ # Entités Doctrine (User, Client, Project, Task, TaskStatus, TaskEffort, TaskPriority, TaskTag, TaskGroup, TimeEntry) src/ApiResource/ # Ressources API Platform (si découplées des entités) -src/State/ # Providers et Processors API Platform (MeProvider, AppVersionProvider, ActiveTimeEntryProvider, UserPasswordHasherProcessor) +src/State/ # Providers et Processors API Platform (MeProvider, AppVersionProvider, ActiveTimeEntryProvider, UserPasswordHasherProcessor, TaskNumberProcessor) src/Repository/ # Repositories Doctrine src/DataFixtures/ # Fixtures config/ # Config Symfony (security, api_platform, lexik_jwt, nelmio_cors, doctrine) @@ -22,12 +22,12 @@ config/jwt/ # Clés JWT (private.pem, public.pem) migrations/ # Migrations Doctrine docs/plans/ # Plans d'implémentation frontend/ # App Nuxt 4 -frontend/pages/ # Pages (index, login, clients, projects, projects/[id], projects/[id]/groups, projects/[id]/statuses, time-tracking, admin) +frontend/pages/ # Pages (index, login, projects, projects/[id], projects/[id]/groups, projects/[id]/archives, time-tracking, admin) frontend/layouts/ # Layouts (pas "layout") -frontend/components/ # Composants Vue (AppTopNav, AppDrawer, ColorPicker, DataTable, *Drawer, TaskCard, Admin*Tab, ProjectStatusTab, ProjectGroupTab, SidebarLink, SidebarTimer, TimeEntry*, TimeTrackingCalendar, ConfirmDeleteStatusModal) +frontend/components/ # Composants Vue (AppTopNav, AppDrawer, ColorPicker, DataTable, ClientDrawer, ProjectDrawer, ProjectGroupTab, TaskCard, TaskDrawer, TaskModal, TaskEffortDrawer, TaskGroupDrawer, TaskPriorityDrawer, TaskStatusDrawer, TaskTagDrawer, Admin*Tab, SidebarLink, SidebarTimer, TimeEntryBlock, TimeEntryContextMenu, TimeEntryDrawer, TimeEntryList, TimeTrackingCalendar, UserDrawer, ConfirmDeleteStatusModal, ConfirmDeleteTaskModal) frontend/composables/# Composables (useApi, useAppVersion) frontend/stores/ # Stores Pinia (auth, ui, timer) -frontend/services/ # Services API (auth, clients, projects, tasks, task-statuses, task-efforts, task-groups, task-priorities, task-types, users, time-entries) +frontend/services/ # Services API (auth, clients, projects, tasks, task-statuses, task-efforts, task-groups, task-priorities, task-tags, users, time-entries) frontend/services/dto/ # Types TypeScript frontend/i18n/locales/ # Fichiers de traduction (langDir résolu depuis i18n/) ``` diff --git a/docs/superpowers/specs/2026-03-12-task-archiving-design.md b/docs/superpowers/specs/2026-03-12-task-archiving-design.md index 013e8de..1cb11d5 100644 --- a/docs/superpowers/specs/2026-03-12-task-archiving-design.md +++ b/docs/superpowers/specs/2026-03-12-task-archiving-design.md @@ -1,4 +1,4 @@ -# Feature: Archivage de tickets et de groupes +o# Feature: Archivage de tickets et de groupes ## Résumé @@ -35,6 +35,7 @@ Une migration Doctrine unique pour les 3 champs (`task_status.is_final`, `task.a ### Archivage de groupe (bulk) L'archivage d'un groupe est une opération frontend multi-appels : + 1. PATCH chaque ticket du groupe avec `{ archived: true }` 2. PATCH le groupe avec `{ archived: true }` @@ -53,17 +54,20 @@ La règle "archiver seulement si statut final" est appliquée côté frontend (v ### TaskDrawer — archivage et modale suppression **Bouton "Archiver"** : + - Visible uniquement quand le ticket a un statut avec `isFinal: true` - PATCH `{ archived: true }` sur le ticket - Si un timer est actif sur ce ticket, l'arrêter avant d'archiver - Ferme le drawer et rafraîchit la liste des tickets **Bouton "Désarchiver"** : + - Visible quand on consulte un ticket archivé (depuis la page archives) - PATCH `{ archived: false }` - Ferme le drawer et rafraîchit la page archives **Modale de confirmation de suppression** : + - Déclenchée au clic sur "Supprimer" dans le TaskDrawer - Message : "Êtes-vous sûr de vouloir supprimer ce ticket ? Cette action est irréversible." - Deux boutons : "Annuler" / "Supprimer" (style destructif, rouge) @@ -84,11 +88,13 @@ La règle "archiver seulement si statut final" est appliquée côté frontend (v **Toggle "Voir les groupes archivés"** : bascule pour afficher les groupes archivés. **Bouton "Archiver" sur un groupe** : + - Visible uniquement si le groupe a au moins un ticket ET que **tous** ses tickets ont un statut `isFinal: true` (un ticket sans statut bloque l'archivage) - Archive tous les tickets du groupe puis le groupe lui-même (appels PATCH séquentiels) - Rafraîchit la liste **Bouton "Désarchiver" sur un groupe archivé** : + - Désarchive le groupe + tous ses tickets (écrase l'état individuel des tickets) - Rafraîchit la liste @@ -123,6 +129,7 @@ Ajout du champ `archived: boolean` dans les types `TaskGroup` et `TaskGroupWrite ## Traductions (i18n) Clés à ajouter dans `fr.json` : + - `task.archive` / `task.unarchive` - `task.delete_confirm_title` / `task.delete_confirm_message` - `group.archive` / `group.unarchive`