initial commit
This commit is contained in:
78
docs/prd/epic-2-teams-constraints.md
Normal file
78
docs/prd/epic-2-teams-constraints.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Epic 2: Teams & Constraints
|
||||
|
||||
**Goal:** Implémenter la gestion complète des Teams avec la règle métier fondamentale : impossible d'avoir 2 personnages du même compte dans une team active. L'utilisateur peut créer des teams, y ajouter des personnages, et voir le statut de complétion.
|
||||
|
||||
## Story 2.1: Team Database Schema
|
||||
|
||||
**As a** developer,
|
||||
**I want** a Prisma schema for Teams with many-to-many relation to Characters,
|
||||
**so that** teams can be created and managed.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
1. Model `Team`: id, name, type (enum: MAIN, SUCCESS, PL, CUSTOM), isActive (boolean), createdAt, updatedAt
|
||||
2. Relation many-to-many Team ↔ Character via table de jonction `TeamMember`
|
||||
3. Model `TeamMember`: teamId, characterId, joinedAt
|
||||
4. Enum `TeamType` avec les types identifiés (Main, Succès, PL, Custom)
|
||||
5. Migration générée et appliquée
|
||||
6. Seed script mis à jour avec 2-3 teams de test
|
||||
|
||||
## Story 2.2: Team CRUD - Basic
|
||||
|
||||
**As a** user,
|
||||
**I want** to create, view, edit and delete teams,
|
||||
**so that** I can organize my characters into groups.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
1. Page `/teams` affiche la liste des teams en tableau (nom, type, nb membres, statut actif)
|
||||
2. Bouton "Ajouter" ouvre un formulaire modal de création
|
||||
3. Formulaire avec champs : nom (requis), type (select), isActive (checkbox)
|
||||
4. Actions Edit/Delete sur chaque ligne
|
||||
5. Clic sur une team navigue vers `/teams/:id` (fiche détail)
|
||||
6. Suppression team supprime aussi les TeamMember associés
|
||||
7. Badge visuel pour teams actives vs inactives
|
||||
8. Toast de confirmation après chaque action
|
||||
|
||||
## Story 2.3: Team Member Management
|
||||
|
||||
**As a** user,
|
||||
**I want** to add and remove characters from a team,
|
||||
**so that** I can compose my teams.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
1. Page `/teams/:id` affiche la liste des membres actuels
|
||||
2. Bouton "Ajouter membre" ouvre un sélecteur de personnages
|
||||
3. Sélecteur filtrable par nom, classe, compte, serveur
|
||||
4. Multi-select possible pour ajouter plusieurs personnages à la fois
|
||||
5. Bouton "Retirer" sur chaque membre pour le supprimer de la team
|
||||
6. Affichage du compte de chaque personnage dans la liste des membres
|
||||
7. Ordre des membres modifiable (drag & drop optionnel, sinon ordre d'ajout)
|
||||
|
||||
## Story 2.4: Account Constraint Validation
|
||||
|
||||
**As a** user,
|
||||
**I want** the system to prevent adding two characters from the same account to an active team,
|
||||
**so that** I respect the game's simultaneous play restriction.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
1. Lors de l'ajout d'un membre, vérification que son compte n'est pas déjà dans la team
|
||||
2. Si conflit détecté : message d'erreur clair indiquant le personnage en conflit
|
||||
3. Validation côté serveur (impossible de contourner)
|
||||
4. Validation côté client pour feedback immédiat
|
||||
5. La contrainte ne s'applique qu'aux teams **actives** (isActive = true)
|
||||
6. Teams inactives peuvent avoir plusieurs persos du même compte (pour planification)
|
||||
7. Lors du passage d'une team inactive → active : vérification des conflits
|
||||
|
||||
## Story 2.5: Team Status Overview
|
||||
|
||||
**As a** user,
|
||||
**I want** to see a summary of each team's composition,
|
||||
**so that** I can quickly assess my teams.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
1. Sur `/teams`, colonnes : nom, type, membres (count), statut, classes représentées
|
||||
2. Sur `/teams/:id`, section récapitulative : nb membres, comptes utilisés, classes
|
||||
3. Indicateur visuel si team incomplète (< 8 membres pour type MAIN)
|
||||
4. Liste des comptes utilisés dans la team (pour éviter conflits lors de multi-boxing)
|
||||
5. Affichage des classes sous forme d'icônes compactes
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user