diff --git a/bun.lock b/bun.lock index 866e6a9..f75d2d0 100644 --- a/bun.lock +++ b/bun.lock @@ -14,6 +14,7 @@ "dayjs": "^1.11.19", "drizzle-orm": "^1.0.0-beta.9-e89174b", "drizzle-zod": "^1.0.0-beta.9-e89174b", + "postgres": "^3.4.8", "react": "^19.2.3", "react-dom": "^19.2.3", "tailwindcss": "^4.1.18", @@ -788,6 +789,8 @@ "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "postgres": ["postgres@3.4.8", "", {}, "sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg=="], + "prettier": ["prettier@3.8.0", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA=="], "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..c3c3173 --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'drizzle-kit' +import { env } from '@/env' + +export default defineConfig({ + schema: './src/db/schema/index.ts', + out: './src/db/migrations', + dialect: 'postgresql', + dbCredentials: { + url: env.DATABASE_URL, + }, +}) diff --git a/package.json b/package.json index 8898442..96223d1 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "dayjs": "^1.11.19", "drizzle-orm": "^1.0.0-beta.9-e89174b", "drizzle-zod": "^1.0.0-beta.9-e89174b", + "postgres": "^3.4.8", "react": "^19.2.3", "react-dom": "^19.2.3", "tailwindcss": "^4.1.18", diff --git a/src/db/index.ts b/src/db/index.ts new file mode 100644 index 0000000..5d3accc --- /dev/null +++ b/src/db/index.ts @@ -0,0 +1,10 @@ +import { drizzle } from 'drizzle-orm/postgres-js' +import * as schema from '@/db/schema' +import { env } from '@/env' + +export function createDb() { + return drizzle({ + connection: env.DATABASE_URL, + schema, + }) +} diff --git a/src/db/migrations/.gitkeep b/src/db/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/db/schema/index.ts b/src/db/schema/index.ts new file mode 100644 index 0000000..c3a9c65 --- /dev/null +++ b/src/db/schema/index.ts @@ -0,0 +1 @@ +export * from './user' diff --git a/src/db/schema/user.ts b/src/db/schema/user.ts new file mode 100644 index 0000000..1ac722e --- /dev/null +++ b/src/db/schema/user.ts @@ -0,0 +1,7 @@ +import { sql } from 'drizzle-orm' +import { pgTable, text, uuid } from 'drizzle-orm/pg-core' + +export const userTable = pgTable('user', { + id: uuid('id').primaryKey().default(sql`uuidv7()`), + name: text('name').notNull(), +}) diff --git a/src/env.ts b/src/env.ts new file mode 100644 index 0000000..5354b99 --- /dev/null +++ b/src/env.ts @@ -0,0 +1,7 @@ +import { z } from 'zod' + +const envSchema = z.object({ + DATABASE_URL: z.url(), +}) + +export const env = envSchema.parse(process.env)