Aller au contenu principal

Créer un Service

Si le Contrôleur est le serveur qui prend la commande, le Service est le Cuisinier 👩‍🍳. C'est ici, et uniquement ici, que doit se trouver ta logique métier (Business Logic).

Pourquoi séparer la logique ?

  1. Réutilisabilité : Un UserService peut être utilisé par le UserController, mais aussi par un AuthService ou une ChatGateway.
  2. Testabilité : Tu peux tester ton service sans avoir besoin de lancer un serveur HTTP complet.
  3. Singletons : Par défaut, les services sont des Singletons. Cela signifie qu'une seule instance de la classe est créée en mémoire et partagée partout. Idéal pour garder une connexion BDD ouverte ou un cache en mémoire.

Le Décorateur @Service()

Pour transformer une simple classe TypeScript en un Service injectable géré par le framework, il suffit d'ajouter @Service().

import { Service } from 'my-fastify-decorators';

@Service()
export class CatService {
private cats: string[] = ['Minou', 'Garfield'];

findAll(): string[] {
// Ici on ferait appel à une BDD en vrai
return this.cats;
}

create(name: string) {
this.cats.push(name);
console.log(`Un nouveau chat est né : ${name}`);
}
}
Règle d'or

Un Service ne devrait jamais gérer directement les objets req (Request) ou res (Response) de Fastify. Il doit prendre des données pures (string, number, DTO) et retourner des données pures.