Files
Lesstime/docs/superpowers/specs/2026-03-12-task-archiving-design.md
Matthieu 20a5dca6d5 docs : add task archiving feature design spec
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 17:31:20 +01:00

3.7 KiB

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