
Configurar o ORM Prisma em uma aplicação NestJS pode ser confuso — especialmente com as mudanças recentes no Prisma 7.
Neste guia, vou te mostrar uma configuração limpa, pronta para produção, usando NestJS e PostgreSQL, além de destacar erros comuns (para você não ficar travado como a maioria dos desenvolvedores no início).
O Prisma é um ORM moderno que simplifica o trabalho com bancos de dados, oferecendo:
Antes de começar, você precisa ter:
npm install -g @nestjs/cli e nest new project-name)Dentro do seu projeto NestJS:
npm install prisma --save-dev
npm install prisma @types/pg --save-devIsso vai criar:
prisma/schema.prisma.envprisma.config.tsExemplo do arquivo prisma.config.ts:
import "dotenv/config";
import { defineConfig, env } from "prisma/config";
export default defineConfig({
schema: "prisma/schema.prisma",
migrations: {
path: "prisma/migrations",
},
datasource: {
url: env("DATABASE_URL"),
},
});No .env:
DATABASE_URL="postgresql://username:password@localhost:5432/mydb"👉 Importante:
output: coloca o client dentro do seu projeto NestmoduleFormat = "cjs": necessário porque o Prisma 7 usa ES Modules por padrão, e o NestJS geralmente usa CommonJSExemplo:
model Employee {
id Int @id @default(autoincrement())
name String
email String @unique
role Role
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum Role {
INTERN
ENGINEER
ADMIN
}Isso irá:
npx prisma generateNo arquivo prisma.service.ts:
import 'dotenv/config';
import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '../generated/prisma/client.js';
import { PrismaPg } from '@prisma/adapter-pg';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
constructor() {
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL as string,
});
super({ adapter });
}
async onModuleInit() {
await this.$connect();
}
}prisma.module.ts:
import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';
@Module({
providers: [PrismaService],
exports: [PrismaService],
})
export class PrismaModule {}npm run start:dev👉 Solução:
src/ para evitar problemasPrisma + NestJS é uma combinação poderosa para criar backends escaláveis.
Depois de bem configurado, você terá: