Objectif :
mkdir fastify-prisma-api cd fastify-prisma-api npm init -y
Installation dépendances :
npm install fastify @prisma/client npm install -D prisma typescript ts-node-dev @types/node
Initialiser Prisma :
npx prisma init
Créer `tsconfig.json` :
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"rootDir": "./src",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
}
}
Ajouter dans `package.json` :
"scripts": {
"dev": "ts-node-dev --respawn src/server.ts"
}
Modifier `prisma/schema.prisma` :
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
DATABASE_URL="file:./dev.db"
Explication :
npx prisma migrate dev --name init
Résultat :
Aucune base externe nécessaire.
fastify-prisma-api/ ├── prisma/ ├── src/ ├── dev.db ├── .env ├── package.json
Fichier `.env` :
DATABASE_URL="postgresql://user:password@localhost:5432/fastifydb"
Modifier `prisma/schema.prisma` :
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
createdAt DateTime @default(now())
}
Créer la base :
npx prisma migrate dev --name init
src/ ├── server.ts └── prisma.ts
`src/prisma.ts`
import {PrismaClient} from "@prisma/client/extension";
export const prisma = new PrismaClient()
`src/server.ts`
import Fastify from "fastify"
import { prisma } from "./prisma"
const app = Fastify({ logger: true })
app.get("/posts", async () => {
return prisma.post.findMany()
})
app.post("/posts", async (request, reply) => {
const { title, content } = request.body as any
const post = await prisma.post.create({
data: { title, content }
})
reply.code(201)
return post
})
app.listen({ port: 3000 }, () => {
console.log("Server running on http://localhost:3000")
})