Skip to main content
Les repositories sont des classes responsables de l’accès aux données dans l’application. Ils encapsulent la logique nécessaire pour interagir avec la base de données via Prisma et transforment les entités de domaine en objets Prisma et vice versa.

Structure d’un Repository

Chaque repository est une classe qui implémente les méthodes nécessaires pour interagir avec les données. Voici les méthodes typiques que l’on peut trouver dans un repository :
1

Méthodes Standards

findById(id: string): Promise<T | null> : Recherche une entité par son identifiant uniquecreate(entity: T): Promise<T> : Crée une nouvelle entité dans la base de donnéesupdate(id: string, entity: T): Promise<T> : Met à jour une entité existantedelete(id: string): Promise<void> : Supprime une entité de la base de données
2

Processus de Transformation

Chaque méthode prend une entité de domaine, la transforme en objet Prisma, effectue l’opération de base de données, puis transforme le résultat en entité de domaine.

Exemple de Repository

class OrderRepository {
  constructor(
    @Inject(PrismaService)
    private readonly prisma: PrismaService
  ) {}

  async findById(id: string): Promise<Order | null> {
    const data = await this.prisma.order.findUnique({
      where: { id },
    });
    if (!data) {
      return null;
    }
    return data ? PrismaOrderAdapter.toEntity(data) : null;
  }

  async create(order: Order): Promise<Order> {
    const data = await this.prisma.order.create({
      data: PrismaOrderAdapter.toPrismaCreate(order),
    });
    return PrismaOrderAdapter.toEntity(data);
  }

  async update(id: string, order: Order): Promise<Order> {
    const data = await this.prisma.order.update({
      where: { id },
      data: PrismaOrderAdapter.toPrismaUpdate(order),
    });
    return PrismaOrderAdapter.toEntity(data);
  }

  async delete(id: string): Promise<void> {
    await this.prisma.order.delete({
      where: { id },
    });
  }
}

Points Clés

1

Transformation

• Utiliser un adapter pour transformer les entités de domaine en objets Prisma et vice versa
2

Flexibilité

• Chaque repository peut avoir des méthodes spécifiques selon les besoins (ex: findByWhatsappNumber)
3

Simplicité

• Garder les repositories simples et concentrés sur l’accès aux données