Banco de Dados
PostgreSQL/MySQL com Prisma ou MongoDB com Mongoose.
O PlazerCLI suporta 3 bancos de dados. PostgreSQL e MySQL usam Prisma ORM; MongoDB usa Mongoose ODM. Todos sao configurados com Docker Compose automaticamente.
PostgreSQL / MySQL com Prisma
O Prisma e o ORM padrao para bancos SQL. O PlazerCLI gera o schema, o service e os scripts de migration.
Arquivos gerados:
apps/api/
├── prisma/
│ └── schema.prisma # Schema do banco
├── src/
│ └── database/
│ ├── prisma.service.ts # PrismaService (NestJS)
│ ├── prisma.module.ts # PrismaModule global (NestJS)
│ └── prisma.ts # Singleton client (Express/Fastify)
Schema do User gerado:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
email String @unique
name String?
password String?
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("users")
}
Se multi-tenant estiver habilitado, o schema inclui o model Tenant e a relacao com User:
model User {
// ... campos base
tenantId String @map("tenant_id")
tenant Tenant @relation(fields: [tenantId], references: [id])
@@map("users")
}
model Tenant {
id String @id @default(cuid())
name String
slug String @unique
users User[]
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("tenants")
}
Prisma Service por framework
NestJS — Service injetavel com lifecycle hooks:
@Injectable()
export class PrismaService extends PrismaClient
implements OnModuleInit, OnModuleDestroy {
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
}
Express / Fastify — Singleton com cache global:
import { PrismaClient } from '@prisma/client';
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
export const prisma = globalForPrisma.prisma || new PrismaClient();
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
Scripts Prisma
Os seguintes scripts sao adicionados ao package.json da API:
| Script | Comando | Descricao |
|---|---|---|
db:push | prisma db push | Sincroniza schema com o banco (dev) |
db:migrate | prisma migrate dev | Cria e aplica migration |
db:studio | prisma studio | Abre admin visual do banco |
db:seed | prisma db seed | Roda seed do banco |
db:generate | prisma generate | Regenera o client |
MongoDB com Mongoose
Para MongoDB, o Mongoose ODM e usado com schemas tipados.
Arquivos gerados:
apps/api/src/database/
├── connection.ts # connectDB function
└── models/
└── user.model.ts # IUser interface + UserSchema
Model do User:
import mongoose, { Schema, Document } from 'mongoose';
export interface IUser extends Document {
email: string;
name?: string;
password?: string;
createdAt: Date;
updatedAt: Date;
}
const UserSchema = new Schema<IUser>(
{
email: { type: String, required: true, unique: true },
name: { type: String },
password: { type: String },
},
{ timestamps: true }
);
export const User = mongoose.model<IUser>('User', UserSchema);
Se multi-tenant estiver habilitado, a conexao suporta criar conexoes separadas por tenant usando getTenantConnection(tenantId).
Docker Compose
O banco de dados e configurado automaticamente no docker-compose.yml:
# PostgreSQL
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: meu_projeto
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
# MongoDB
services:
mongo:
image: mongo:7
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db