web:api:prisma-fastify:p2-b

Ceci est une ancienne révision du document !


Structure :

src/
 ├── prisma.ts
 ├── routes/
 │     └── user.routes.ts
 ├── controllers/
 │     └── user.controller.ts
 └── services/
       └── user.service.ts

Rôle :

  1. Parler à Prisma
  2. Contenir la logique métier
  3. Ne PAS connaître Fastify

import { prisma } from "../prisma"

export async function createUser(data: {
  name: string
  email: string
}) {
  return prisma.user.create({ data })
}

export async function getUsers() {
  return prisma.user.findMany()
}


Rôle :

  1. Lire request
  2. Appeler le service
  3. Gérer la réponse HTTP

import { FastifyRequest, FastifyReply } from "fastify"
import * as userService from "../services/user.service"

export async function createUser(
  request: FastifyRequest,
  reply: FastifyReply
) {
  const user = await userService.createUser(
    request.body as any
  )

  return reply.status(201).send(user)
}

export async function getUsers(
  request: FastifyRequest,
  reply: FastifyReply
) {
  const users = await userService.getUsers()
  return reply.send(users)
}


Rôle :

  1. Définir les URLs
  2. Relier route → controller

import { FastifyInstance } from "fastify"
import * as userController from "../controllers/user.controller"

export async function userRoutes(app: FastifyInstance) {

  app.post("/users", userController.createUser)

  app.get("/users", userController.getUsers)

}


import { PrismaClient } from "@prisma/client"

export const prisma = new PrismaClient()


Routes :

→ mapping URL

Controllers :

→ gestion HTTP

Services :

→ logique métier + DB

Prisma :

→ accès base de données

✔ Pas de classes ✔ Fonctions simples ✔ Séparation claire ✔ Architecture maintenable ✔ Production ready


  • web/api/prisma-fastify/p2-b.1773051837.txt.gz
  • Dernière modification : il y a 28 heures
  • de jcheron