Database
Drizzle ORM: SQLite tanpa instalasi atau PostgreSQL.
Zentara memakai Drizzle ORM. Defaultnya SQLite lewat modul node:sqlite bawaan Node, jadi tidak perlu memasang driver atau server database apa pun.
// src/app/db/schema.ts
export const products = sqliteTable("products", {
id: integer("id").primaryKey({ autoIncrement: true }),
name: text("name").notNull(),
price: integer("price").notNull(),
});
// di route
import { eq } from "drizzle-orm";
import { db } from "../../db/index.js";
import { products } from "../../db/schema.js";
export const GET = () => db.select().from(products);
const [baru] = await db.insert(products).values({ name: "Kopi", price: 45000 }).returning();
await db.update(products).set({ price: 40000 }).where(eq(products.id, 1));
await db.transaction(async (tx) => { /* ... */ });Alur kerja setelah mengubah schema:
| Perintah | Fungsi |
|---|---|
zentara db:generate [--name x] |
buat file migrasi SQL di drizzle/ dari perubahan schema |
zentara db:migrate |
terapkan migrasi yang belum jalan |
zentara db:seed |
isi data awal dari src/app/db/seed.ts (aman diulang) |
PostgreSQL untuk produksi:
- Jalankan
npm install postgres. - Tulis schema dengan
drizzle-orm/pg-core, lalu ubahdialectdidrizzle.config.tsmenjadi"postgresql". - Di
src/app/db/index.ts, ganticreateSqlite(...)denganawait createPostgres(process.env.DATABASE_URL, schema).
Catatan SQLite: transaksi dijalankan bergantian (satu per satu) supaya query dari request lain tidak ikut masuk ke transaksi yang sedang berjalan.