Structure :
src/
├── prisma.ts
├── routes/
│ └── user.routes.ts
├── controllers/
│ └── user.controller.ts
└── services/
└── user.service.ts
Rôle :
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 :
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 :
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