docs : add task archiving feature design spec
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
108
docs/superpowers/specs/2026-03-12-task-archiving-design.md
Normal file
108
docs/superpowers/specs/2026-03-12-task-archiving-design.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Feature: Archivage de tickets et de groupes
|
||||
|
||||
## Résumé
|
||||
|
||||
Permettre d'archiver des tickets individuels (quand leur statut est final) et des groupes entiers (quand tous leurs tickets sont en statut final). Les éléments archivés disparaissent de la vue kanban et sont consultables via une page dédiée "Archives" dans le projet.
|
||||
|
||||
## Modèle de données
|
||||
|
||||
### TaskStatus — ajout `isFinal`
|
||||
|
||||
- Nouveau champ `isFinal: bool` (default `false`)
|
||||
- Mis à `true` sur le statut "Terminé" dans les fixtures
|
||||
- Exposé en lecture via API Platform
|
||||
- Permet d'identifier dynamiquement quels statuts autorisent l'archivage
|
||||
|
||||
### Task — ajout `archived`
|
||||
|
||||
- Nouveau champ `archived: bool` (default `false`)
|
||||
- Filtre API Platform `archived` (exact) pour requêter `?archived=false` ou `?archived=true`
|
||||
- Le kanban charge les tickets avec `archived=false`
|
||||
- La page archives charge les tickets avec `archived=true`
|
||||
|
||||
### TaskGroup — ajout `archived`
|
||||
|
||||
- Nouveau champ `archived: bool` (default `false`)
|
||||
- Filtre API Platform `archived` (exact)
|
||||
- Le kanban et le filtre groupe n'affichent que les groupes `archived=false`
|
||||
|
||||
### Migration
|
||||
|
||||
Une migration Doctrine unique pour les 3 champs (`task_status.is_final`, `task.archived`, `task_group.archived`).
|
||||
|
||||
## Frontend
|
||||
|
||||
### TaskDrawer — archivage et modale suppression
|
||||
|
||||
**Bouton "Archiver"** :
|
||||
- Visible uniquement quand le ticket a un statut avec `isFinal: true`
|
||||
- PATCH `{ archived: true }` sur le ticket
|
||||
- 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)
|
||||
- Suit le pattern existant de `ConfirmDeleteStatusModal`
|
||||
|
||||
### Page Archives — `/projects/[id]/archives`
|
||||
|
||||
- Nouveau sous-onglet "Archives" dans la navigation projet (à côté de "Groupes")
|
||||
- Liste des tickets archivés du projet (`archived=true`)
|
||||
- Colonnes affichées : numéro, titre, statut, groupe, assigné
|
||||
- Clic sur un ticket → ouvre le TaskDrawer (avec bouton "Désarchiver")
|
||||
- Filtre par groupe possible
|
||||
|
||||
### Page Groupes — archivage de groupes
|
||||
|
||||
**Vue par défaut** : affiche uniquement les groupes non archivés.
|
||||
|
||||
**Toggle "Voir les groupes archivés"** : bascule pour afficher les groupes archivés.
|
||||
|
||||
**Bouton "Archiver" sur un groupe** :
|
||||
- Visible uniquement si **tous** les tickets du groupe ont un statut `isFinal: true`
|
||||
- Archive le groupe (`archived: true`) + tous ses tickets d'un coup
|
||||
- Rafraîchit la liste
|
||||
|
||||
**Bouton "Désarchiver" sur un groupe archivé** :
|
||||
- Désarchive le groupe + tous ses tickets
|
||||
- Rafraîchit la liste
|
||||
|
||||
### Kanban — filtrage
|
||||
|
||||
- Le filtre groupe dans le dropdown n'affiche que les groupes `archived=false`
|
||||
- Les tickets `archived=true` sont exclus du kanban
|
||||
|
||||
## DTOs
|
||||
|
||||
### TaskStatus
|
||||
|
||||
Ajout du champ `isFinal: boolean` dans le type `TaskStatus`.
|
||||
|
||||
### Task
|
||||
|
||||
Ajout du champ `archived: boolean` dans les types `Task` et `TaskWrite`.
|
||||
|
||||
### TaskGroup
|
||||
|
||||
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`
|
||||
- `group.show_archived` / `group.hide_archived`
|
||||
- `project.tabs.archives`
|
||||
|
||||
## Hors périmètre
|
||||
|
||||
- Historique/date d'archivage (pourra être ajouté plus tard avec un champ `archivedAt`)
|
||||
- Archivage automatique (cron/scheduler)
|
||||
- Archivage en masse depuis la page archives
|
||||
Reference in New Issue
Block a user