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.1773051821.txt.gz
  • Dernière modification : il y a 25 heures
  • de jcheron