Devlog #5 : Historique des Commandes et Recherche Robuste
Focus : Implémentation de l'historique des commandes avec pagination/filtres avancés, et résolution d'une problématique complexe de normalisation de données.
📋 Historique des Commandes : Filtres Avancés
Un endpoint d'historique des commandes a été mis en place, avec les filtres suivants :
| Filtre | Options |
|---|---|
| Date de commande | Ascendant / Descendant |
| Prix total | Ascendant / Descendant |
| Année de commande | Filtre par année spécifique |
| Recherche | Par nom de produit (insensible aux accents) |
🔍 Le Défi de la Recherche : Accents et Normalisation
Le filtre de recherche par nom de produit dans l'historique des commandes a mis en évidence un problème d'inconsistance des données : "Boîte" et "Boite" étaient traités comme deux valeurs distinctes.
La solution adoptée opère à deux niveaux :
1. Niveau Base de Données (PostgreSQL + DQL)
La requête DQL récupère les commandes dont au moins un item correspond au filtre de recherche.
Pour ignorer les accents dans le LIKE, j'ai :
- Activé l'extension
unaccentvia une migration PostgreSQL. - Déclaré une Custom DQL Function pour rendre
unaccent()utilisable directement dans les QueryBuilders Doctrine.
Pourquoi custom ?
UNACCENTest une extension propre à PostgreSQL, elle ne fait pas partie des extensions Doctrine standard. La librairiebeberlei/DoctrineExtensions(utilisée ailleurs dans le projet) ne la couvre pas.
2. Niveau Application (PHP)
La requête SQL ramène les commandes contenant au moins un item correspondant. Un second filtrage en mémoire, dans le Manager, retire les items qui ne correspondent pas au filtre pour ne conserver que ceux pertinents.
PHP étant sensible aux accents par défaut, la normalisation utilise transliterator_transliterate :
graph TD
A["Requête DQL + UNACCENT\n(récupère les commandes\navec ≥1 item correspondant)"] --> B["Manager PHP\n(filtre les items\nnon-correspondants)"]
B --> C["✅ Résultat final\n(insensible casse + accents)"]
Résultat : Une recherche totalement agnostique de la casse et des accents, tant en SQL qu'en mémoire.
🤖 Pilotage de l'IA pour le Frontend
Bien que mon cœur de métier soit le Backend Symfony, j'utilise l'IA pour générer les interfaces statiques en Vue.js.
Principe : Je ne demande pas "une page de recherche". Je fournis un contrat strict :
Crée une vue '/shop/search' représentant la page de recherche de produits.
Utilise des composants réutilisables.
Chaque carte produit a les propriétés suivantes : [liste exhaustive].
Ajoute des filtres de recherche :
- une barre de recherche
- un module de filtres : nom ASC/DESC, date ASC/DESC, filtre par type
Observation : L'IA est un excellent exécutant pour le boilerplate CSS/HTML. Elle nécessite cependant une revue stricte : elle a tendance à ajouter des propriétés non demandées ou une logique de state inutile.