From 4c5ceb478bd40f20af4a5a82d70eacf354c22f3a Mon Sep 17 00:00:00 2001 From: imbytecat Date: Sat, 17 Jan 2026 01:54:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=94=AF=E6=8C=81=E4=B8=8EDrizzle=20ORM=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 postgres 依赖版本 3.4.8 以支持数据库连接功能 - 添加 Drizzle ORM 配置文件以指定数据库模式、迁移目录、数据库方言及连接凭证。 - 添加 postgres 依赖以支持数据库连接功能 - 初始化数据库连接,创建使用 Drizzle ORM 的数据库实例并导出连接函数。 - 添加空文件以保留数据库迁移目录的结构 - 导出用户数据模型的定义 - 创建用户表结构,包含唯一ID和姓名字段,并设置ID默认使用uuidv7生成。 - 添加环境变量验证,确保数据库连接URL格式正确。 --- bun.lock | 3 +++ drizzle.config.ts | 11 +++++++++++ package.json | 1 + src/db/index.ts | 10 ++++++++++ src/db/migrations/.gitkeep | 0 src/db/schema/index.ts | 1 + src/db/schema/user.ts | 7 +++++++ src/env.ts | 7 +++++++ 8 files changed, 40 insertions(+) create mode 100644 drizzle.config.ts create mode 100644 src/db/index.ts create mode 100644 src/db/migrations/.gitkeep create mode 100644 src/db/schema/index.ts create mode 100644 src/db/schema/user.ts create mode 100644 src/env.ts 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)