# 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 ---