From 1d3629f025e653866a52d7ae422c43188d00021e Mon Sep 17 00:00:00 2001 From: Batuhan Kayahan <82649079+batuhanlog@users.noreply.github.com> Date: Sat, 21 Mar 2026 22:25:40 +0300 Subject: [PATCH 1/2] feat(db): add drizzle-zod validation schemas for mutation input validation - Add drizzle-zod dependency to @orbitkit/db package - Create validation schemas using createInsertSchema and createSelectSchema - Add custom Zod refinements (email validation, URL validation, min length) - Export insert/select schemas and inferred types for User, Session, OAuth - Add new './validation' export path in package.json Closes #66 --- packages/db/package.json | 5 ++++ packages/db/src/schema/index.ts | 1 + packages/db/src/validation/index.ts | 42 +++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 packages/db/src/validation/index.ts diff --git a/packages/db/package.json b/packages/db/package.json index 4260bab..9a7c7f5 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -15,6 +15,10 @@ "./schema": { "types": "./dist/schema/index.d.ts", "default": "./dist/schema/index.js" + }, + "./validation": { + "types": "./dist/validation/index.d.ts", + "default": "./dist/validation/index.js" } }, "scripts": { @@ -36,6 +40,7 @@ "@neondatabase/serverless": "^0.9.4", "@orbitkit/env": "workspace:^", "drizzle-orm": "^0.33.0", + "drizzle-zod": "^0.5.1", "pg": "^8.12.0", "postgres": "^3.4.4", "zod": "^3.23.8" diff --git a/packages/db/src/schema/index.ts b/packages/db/src/schema/index.ts index 70f3067..44da040 100644 --- a/packages/db/src/schema/index.ts +++ b/packages/db/src/schema/index.ts @@ -1,3 +1,4 @@ export * from './user' export * from './session' export * from './oauth' +export * from '../validation' diff --git a/packages/db/src/validation/index.ts b/packages/db/src/validation/index.ts new file mode 100644 index 0000000..0737b09 --- /dev/null +++ b/packages/db/src/validation/index.ts @@ -0,0 +1,42 @@ +import { createInsertSchema, createSelectSchema } from 'drizzle-zod' +import { z } from 'zod' + +import { oauthAccountTable } from '../schema/oauth' +import { sessionTable } from '../schema/session' +import { userTable } from '../schema/user' + +// ─── User Schemas ──────────────────────────────────────────── + +export const insertUserSchema = createInsertSchema(userTable, { + email: z.string().email('Invalid email address'), + name: z.string().min(1, 'Name is required').optional(), + avatarUrl: z.string().url('Invalid URL').optional(), +}) + +export const selectUserSchema = createSelectSchema(userTable) + +export type InsertUser = z.infer +export type SelectUser = z.infer + +// ─── Session Schemas ───────────────────────────────────────── + +export const insertSessionSchema = createInsertSchema(sessionTable, { + expiresAt: z.date(), +}) + +export const selectSessionSchema = createSelectSchema(sessionTable) + +export type InsertSession = z.infer +export type SelectSession = z.infer + +// ─── OAuth Account Schemas ─────────────────────────────────── + +export const insertOAuthAccountSchema = createInsertSchema(oauthAccountTable, { + providerId: z.string().min(1, 'Provider ID is required'), + providerUserId: z.string().min(1, 'Provider User ID is required'), +}) + +export const selectOAuthAccountSchema = createSelectSchema(oauthAccountTable) + +export type InsertOAuthAccount = z.infer +export type SelectOAuthAccount = z.infer From 9e1ab98fab1cac3894a94800227bdaac584254aa Mon Sep 17 00:00:00 2001 From: Corfitz <52371939+imCorfitz@users.noreply.github.com> Date: Sun, 22 Mar 2026 14:48:41 +0100 Subject: [PATCH 2/2] Add added changesets for drizzle zod pr --- .changeset/cuddly-impalas-hang.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cuddly-impalas-hang.md diff --git a/.changeset/cuddly-impalas-hang.md b/.changeset/cuddly-impalas-hang.md new file mode 100644 index 0000000..0710333 --- /dev/null +++ b/.changeset/cuddly-impalas-hang.md @@ -0,0 +1,5 @@ +--- +"@orbitkit/db": patch +--- + +feat(db): add drizzle-zod validation schemas for mutation input validation