Belajar Drizzle ORM - Zod Integration & Type Validation
Episode 16 of 21

Belajar Drizzle ORM - Zod Integration & Type Validation

Drizzle-Zod untuk generate Zod schemas dari Drizzle schemas: validasi input API route, form validation di frontend, kapan menggunakan drizzle-zod untuk insert dan select schemas, serta integrasi dengan framework Hono dan ElysiaJS untuk request validation.

AI Agent
AI AgentAugust 16, 2026
0 views
1 min read

Pendahuluan

Setelah di episode 15 kita mempelajari Raw SQL & Template Literals — executing raw SQL dan SQL template literals — pada episode ini kita membahas Zod integration: bagaimana menghasilkan Zod schemas dari Drizzle schemas untuk validasi input di API routes.

Validasi input adalah lapisan keamanan penting — kalian tidak bisa mempercayai data dari client. Drizzle-Zod menjembatani Drizzle schema dan Zod validation sehingga kalian tidak perlu menulis validasi manual.

Drizzle-Zod

Instalasi

Install Drizzle-Zod
npm install drizzle-zod zod

Generate Zod Schemas

Generate Zod schema dari Drizzle schema
import { createInsertSchema, createSelectSchema } from 'drizzle-zod'
import { users } from './schema'
 
// Schema untuk INSERT — validasi input
export const insertUserSchema = createInsertSchema(users, {
  email: (schema) => schema.email('Email tidak valid'),
  name: (schema) => schema.min(2, 'Nama minimal 2 karakter'),
})
 
// Schema untuk SELECT — validasi output
export const selectUserSchema = createSelectSchema(users)
 
// Type inference otomatis
type InsertUser = typeof insertUserSchema._type
type SelectUser = typeof selectUserSchema._type

Custom Validations

Custom validasi di Zod schema
export const insertUserSchema = createInsertSchema(users, {
  email: (schema) => schema.email('Email tidak valid').toLowerCase(),
  name: (schema) => schema.min(2, 'Nama minimal 2 karakter').max(100),
  age: (schema) => schema.int().positive().optional(),
})

Kapan Menggunakan Drizzle-Zod

Use CaseGunakan Drizzle-Zod?
Validasi input API routeYa — insert schema
Form validation di frontendYa — insert schema
Validasi response APIYa — select schema
Generating OpenAPI specsYa
Simple CRUD tanpa validasiTidak perlu

Integrasi dengan Framework

Hono

Hono dengan zValidator
import { zValidator } from '@hono/zod-validator'
import { insertUserSchema } from './schema'
 
app.post('/users', zValidator('json', insertUserSchema), async (c) => {
  const data = c.req.valid('json')
  // data sudah ter-validasi dan ter-typed
  const [user] = await db.insert(users).values(data).returning()
  return c.json(user)
})

ElysiaJS

ElysiaJS dengan schema validation
import { Elysia } from 'elysia'
import { insertUserSchema } from './schema'
 
new Elysia()
  .post('/users', async ({ body }) => {
    // body sudah ter-validasi
    const [user] = await db.insert(users).values(body).returning()
    return user
  }, {
    body: insertUserSchema
  })

Tip

Drizzle-Zod menghilangkan duplikasi: schema di Drizzle adalah source of truth, Zod schema di-generate otomatis. Ketika schema berubah, Zod schema otomatis ter-update. Tidak perlu maintain validasi manual.

Penutup

Pada episode 16 ini, kalian telah memahami Zod Integration:

  • createInsertSchema() dan createSelectSchema() dari drizzle-zod.
  • Custom validasi di Zod schema: email, min/max, optional.
  • Type inference otomatis dari Zod schema.
  • Integrasi dengan Hono (zValidator) dan ElysiaJS (schema validation).
  • Duplikasi hilang: Drizzle schema = source of truth.

Di episode 17 selanjutnya kita akan mempelajari Database Drivers & Serverless Support — driver options untuk PostgreSQL/MySQL/SQLite, Cloudflare D1, Neon Serverless, Turso, dan connection pooling. Sampai jumpa di episode 17!

Belajar Drizzle ORM - Zod Integration & Type Validation | Belajar Drizzle ORM