Préparer le jeu de données du projet
Objectif : Mettre en place des commandes et des produits de test adaptés aux routes à vérifier.
Une route de liste qui renvoie toujours un tableau vide ne permet pas de vérifier les filtres. Une commande qui référence un produit inexistant rend aussi les résultats difficiles à interpréter. Vous allez préparer un jeu de données en mémoire, cohérent entre les deux ressources, pour donner aux prochaines vérifications des résultats prévisibles.
Vous avez déjà séparé routes, contrôleurs et services par ressource. Ici, vous ne modifiez pas le flux HTTP : vous donnez aux services des données initiales que leurs opérations de lecture et leurs filtres peuvent utiliser. Le stockage reste en mémoire et disparaît à l’arrêt du processus ; il convient à cet exercice, pas à la persistance d’une application en production.
Définir des données cohérentes
Pour que les filtres soient observables, prévoyez plusieurs statuts de commande et au moins deux produits. Chaque commande comporte un produitId qui correspond à l’identifiant d’un produit existant. Les valeurs ci-dessous forment un ensemble simple : deux catégories, deux statuts et plusieurs commandes, dont certaines partagent un même statut ou un même produit.
const produits = [
{ id: 1, nom: 'Clavier', categorie: 'accessoires' },
{ id: 2, nom: 'Écran', categorie: 'informatique' },
{ id: 3, nom: 'Souris', categorie: 'accessoires' }
];
function lister(filtres = {}) {
return Promise.resolve(
produits.filter((produit) => {
return !filtres.categorie || produit.categorie === filtres.categorie;
})
);
}
module.exports = { lister };Le service des produits expose ici une liste initialisée une seule fois au chargement du module. Sa fonction lister conserve une interface asynchrone et accepte le filtre de catégorie déjà prévu dans le projet. Si votre fichier contient d’autres opérations, gardez-les et intégrez le tableau ainsi que la fonction de filtrage sans supprimer ces exports.
const commandes = [
{ id: 1, produitId: 1, quantite: 2, statut: 'en-attente' },
{ id: 2, produitId: 2, quantite: 1, statut: 'expediee' },
{ id: 3, produitId: 1, quantite: 1, statut: 'en-attente' },
{ id: 4, produitId: 3, quantite: 3, statut: 'expediee' }
];
function lister(filtres = {}) {
return Promise.resolve(
commandes.filter((commande) => {
const statutCorrespond = !filtres.statut || commande.statut === filtres.statut;
const produitCorrespond = !filtres.produitId || commande.produitId === Number(filtres.produitId);
return statutCorrespond && produitCorrespond;
})
);
}
function trouverParId(id) {
return Promise.resolve(commandes.find((commande) => commande.id === Number(id)) || null);
}
module.exports = { lister, trouverParId };Cet exemple montre les données et les opérations de lecture nécessaires à la liste filtrée et à la consultation par identifiant déjà présentes dans votre projet. Ne remplacez pas aveuglément le fichier si vous avez aussi des opérations de création, modification ou suppression : conservez-les et faites-les travailler sur le même tableau commandes. Vérifiez également que les noms de champs respectent ceux utilisés par votre validation et vos contrôleurs.
Comprendre les résultats attendus
Les filtres combinés gardent uniquement les commandes qui satisfont à la fois le statut et le produit demandés. Les paramètres d’URL arrivent généralement sous forme de chaînes : le service convertit donc produitId en nombre avant de le comparer à l’identifiant numérique stocké. La même logique de conversion doit être conservée dans vos opérations de consultation et d’écriture si elles reçoivent des identifiants issus de la route.
lister({ statut: 'en-attente', produitId: '1' });Promise résolue avec :
[
{ id: 1, produitId: 1, quantite: 2, statut: 'en-attente' },
{ id: 3, produitId: 1, quantite: 1, statut: 'en-attente' }
]Le résultat attendu contient deux commandes, car elles correspondent toutes deux au statut en-attente et au produit 1. Le service des produits permet de son côté de filtrer les trois entrées, par exemple pour ne retourner que les éléments de catégorie accessoires. Cette prévisibilité vous aidera à distinguer un résultat correct d’un problème de route ou de transmission des filtres.
À retenir
- Initialisez les tableaux une fois dans les services pour conserver un état stable pendant l’exécution.
- Faites correspondre chaque `produitId` de commande à un produit présent dans le jeu de données.
- Gardez les filtres dans les services et préservez les opérations déjà utilisées par vos contrôleurs.
- Redémarrez le serveur pour repartir des données initiales lorsque les tableaux ont été modifiés.
Dans la prochaine leçon, vous pourrez envoyer des requêtes HTTP à ces routes et examiner les résultats produits par ce jeu de données.