Padrões para criar tabelas, migrations, queries com Drizzle ORM, relacionamentos e validação Zod. Use quando precisar modificar o schema do banco ou criar queries.
Tudo fica em shared/schema.ts (~3900 linhas). Este arquivo define:
O banco usa 12+ schemas para organizar tabelas por domínio:
import { pgSchema } from "drizzle-orm/pg-core";
export const coreSchema = pgSchema("core");
export const campaignSchema = pgSchema("campaign");
export const creatorSchema = pgSchema("creator");
export const brandSchema = pgSchema("brand");
export const contentSchema = pgSchema("content");
export const messagingSchema = pgSchema("messaging");
export const gamificationSchema = pgSchema("gamification");
export const analyticsSchema = pgSchema("analytics");
export const billingSchema = pgSchema("billing");
export const academySchema = pgSchema("academy");
export const socialSchema = pgSchema("social");
export const systemSchema = pgSchema("system");
export const campaigns = campaignSchema.table("campaigns", {
id: serial("id").primaryKey(),
companyId: integer("company_id").notNull().references(() => companies.id),
title: varchar("title", { length: 255 }).notNull(),
status: varchar("status", { length: 50 }).default("draft"),
budget: numeric("budget", { precision: 10, scale: 2 }),
isActive: boolean("is_active").default(true),
metadata: jsonb("metadata"),
createdAt: timestamp("created_at").defaultNow(),
updatedAt: timestamp("updated_at").defaultNow(),
});
| Tipo Drizzle | PostgreSQL | Uso |
|---|---|---|
serial("id") | SERIAL | IDs auto-incremento |
varchar("x", { length: N }) | VARCHAR(N) | Strings com limite |
text("x") | TEXT | Strings longas |
integer("x") | INTEGER | Números inteiros |
numeric("x", { precision, scale }) | NUMERIC | Valores monetários |
boolean("x") | BOOLEAN | Flags |
timestamp("x") | TIMESTAMP | Datas |
jsonb("x") | JSONB | Dados estruturados flexíveis |
export const campaignStatusEnum = campaignSchema.enum("campaign_status", [
"draft", "active", "paused", "completed", "cancelled"
]);
// Usar na tabela: