3.3 KiB
Epic 3: Filtering & Search
Goal: Ajouter un système de filtrage multicritères et de recherche textuelle sur la liste des personnages. L'utilisateur peut rapidement trouver les personnages qui correspondent à ses critères (classe, serveur, compte, team, etc.).
Story 3.1: Filter Sidebar Component
As a user, I want a sidebar with filter options on the characters list, so that I can narrow down the displayed characters.
Acceptance Criteria:
- Sidebar à gauche de la liste des personnages
- Section "Classe" : checkboxes pour chaque classe (17 classes)
- Section "Serveur" : checkboxes pour chaque serveur existant
- Section "Compte" : checkboxes pour chaque compte existant
- Section "Team" : checkboxes pour chaque team existante
- Section "Niveau" : slider ou inputs min/max (1-200)
- Bouton "Réinitialiser les filtres"
- Sidebar collapsible sur mobile (bouton toggle)
- Compteur de résultats mis à jour en temps réel
Story 3.2: Filter Logic Implementation
As a developer, I want server-side filtering with URL state, so that filters are shareable and persist on refresh.
Acceptance Criteria:
- Filtres stockés dans les query params de l'URL (ex:
?class=CRA,IOP&server=1) - API endpoint accepte les paramètres de filtre
- Requête Prisma optimisée avec WHERE dynamique
- Filtres combinés en AND (classe ET serveur ET compte...)
- Au sein d'un même filtre, valeurs combinées en OR (Cra OU Iop)
- État des filtres synchronisé avec l'URL au changement
- Chargement initial lit les filtres depuis l'URL
- Debounce sur les changements pour éviter trop de requêtes
Story 3.3: Text Search
As a user, I want to search characters by name, so that I can quickly find a specific character.
Acceptance Criteria:
- Champ de recherche au-dessus du tableau
- Recherche sur le nom du personnage (insensible à la casse)
- Recherche également sur le nom du compte
- Résultats filtrés en temps réel (debounce 300ms)
- Recherche combinable avec les filtres sidebar
- Icône "clear" pour vider la recherche
- Placeholder : "Rechercher un personnage..."
- Recherche stockée dans l'URL (
?q=...)
Story 3.4: Column Sorting
As a user, I want to sort the characters table by clicking column headers, so that I can organize the data as needed.
Acceptance Criteria:
- Colonnes triables : nom, classe, niveau, serveur, compte
- Clic sur header = tri ascendant, second clic = descendant, troisième = reset
- Indicateur visuel de la colonne triée (flèche up/down)
- Tri côté serveur pour performance
- Tri par défaut : niveau descendant (200 en premier)
- Tri stocké dans l'URL (
?sort=level&order=desc) - Un seul tri actif à la fois
Story 3.5: Saved Filter Presets
As a user, I want to save and reuse filter combinations, so that I don't have to reconfigure common filters.
Acceptance Criteria:
- Bouton "Sauvegarder ce filtre" quand filtres actifs
- Modal pour nommer le preset
- Liste des presets sauvegardés dans la sidebar (section "Mes filtres")
- Clic sur preset applique tous ses filtres
- Bouton supprimer sur chaque preset
- Presets stockés en base de données (model
FilterPreset) - Limite de 10 presets maximum
- Presets spécifiques à l'utilisateur (pour futur multi-user)