4.3 KiB
Epic 1: Foundation & Core Entities
Goal: Établir les fondations du projet (setup, Docker, Prisma, CI/CD) et implémenter le CRUD complet pour les entités de base : Serveurs, Comptes et Personnages. À la fin de cet epic, l'utilisateur peut créer, consulter, modifier et supprimer des serveurs, comptes et personnages.
Story 1.1: Project Setup & Infrastructure
As a developer, I want a fully configured TanStack Start project with Docker and GitLab CI, so that I can start development with a working local environment and deployment pipeline.
Acceptance Criteria:
- TanStack Start project initialized with TypeScript strict mode
- Docker Compose configuration with app service and PostgreSQL 16
- Prisma configured and connected to PostgreSQL
- shadcn/ui installed with base components (Button, Input, Card, Table)
- ESLint + Prettier configured with recommended rules
- GitLab CI pipeline: build, lint, test stages
- Dockerfile multi-stage pour production build
- README avec instructions de setup local
- Application démarre et affiche une page d'accueil "Dofus Manager"
Story 1.2: Database Schema - Core Entities
As a developer, I want a Prisma schema with Server, Account, and Character models, so that the data structure is defined and migrations are ready.
Acceptance Criteria:
- Model
Server: id, name, createdAt, updatedAt - Model
Account: id, name, ogrines (integer), createdAt, updatedAt - Model
Character: id, name, class (enum 17 classes), level (1-200), serverId (FK), accountId (FK), createdAt, updatedAt - Enum
CharacterClassavec les 17 classes Dofus - Relations définies : Character → Server (N:1), Character → Account (N:1)
- Migration initiale générée et appliquée
- Seed script avec données de test (2 serveurs, 3 comptes, 10 personnages)
Story 1.3: Server CRUD
As a user, I want to manage servers (create, view, edit, delete), so that I can add the Dofus servers I play on.
Acceptance Criteria:
- Page
/serversaffiche la liste des serveurs en tableau - Bouton "Ajouter" ouvre un formulaire modal de création
- Formulaire avec champ nom (requis, unique)
- Actions Edit/Delete sur chaque ligne (icônes au hover)
- Confirmation avant suppression
- Toast de confirmation après chaque action
- Validation : nom non vide, unicité vérifiée côté serveur
- Serveurs triés par nom alphabétique
Story 1.4: Account CRUD
As a user, I want to manage my Dofus accounts (create, view, edit, delete), so that I can organize my characters by account.
Acceptance Criteria:
- Page
/accountsaffiche la liste des comptes en tableau (nom, ogrines, nb personnages) - Bouton "Ajouter" ouvre un formulaire modal de création
- Formulaire avec champs : nom (requis), ogrines (optionnel, défaut 0)
- Actions Edit/Delete sur chaque ligne
- Clic sur un compte navigue vers
/accounts/:id(fiche détail) - Page détail affiche infos compte + liste des personnages associés
- Suppression compte impossible si personnages associés (message d'erreur)
- Toast de confirmation après chaque action
Story 1.5: Character CRUD
As a user, I want to manage my characters (create, view, edit, delete), so that I can track all my Dofus characters.
Acceptance Criteria:
- Page
/charactersaffiche la liste des personnages en tableau (nom, classe, niveau, serveur, compte) - Bouton "Ajouter" ouvre un formulaire modal de création
- Formulaire avec champs : nom (requis), classe (select), niveau (1-200), serveur (select), compte (select)
- Actions Edit/Delete sur chaque ligne
- Clic sur un personnage navigue vers
/characters/:id(fiche détail) - Page détail affiche toutes les infos du personnage
- Icônes de classe affichées (optionnel: images ou emojis)
- Tableau paginé (20 items par page)
- Toast de confirmation après chaque action
Story 1.6: Navigation & Layout
As a user, I want a consistent navigation layout, so that I can easily move between sections of the app.
Acceptance Criteria:
- Sidebar de navigation avec liens : Dashboard, Personnages, Comptes, Serveurs
- Layout responsive : sidebar collapse sur mobile
- Breadcrumb sur les pages de détail
- Page active mise en évidence dans la sidebar
- Header avec titre de l'application
- Dark mode toggle (état persisté en localStorage)