forked from imbytecat/fullstack-starter
- 添加SQLite数据库文件及数据目录的忽略规则 - 将数据库连接地址更新为本地SQLite数据库文件路径 - 将数据库从 PostgreSQL 迁移至 SQLite,更新依赖、Drizzle 方言及数据类型映射,确保嵌入式环境兼容性并保持应用层代码不变。 - 将数据库方言从 PostgreSQL 更改为 SQLite。 - 将数据库依赖从 postgres 替换为 better-sqlite3,并添加 better-sqlite3 的类型定义。 - 修改数据库连接字符串验证规则,从URL格式验证改为非空字符串验证。 - 将数据库连接从 PostgreSQL 切换为 Better-SQLite3,并支持创建目录和内存数据库。 - 将 todo 表的 completed 字段从 PostgreSQL 的 boolean 类型改为 SQLite 的 boolean 模式整数类型。 - 将字段定义从 PostgreSQL 适配改为 SQLite 适配,使用文本类型 ID 和时间戳整数类型,并统一使用 UUIDv7 和当前时间作为默认值。 - 添加 better-sqlite3 及其类型定义,并引入相关依赖以支持其功能 - 添加 better-sqlite3 依赖并移除 postgres 依赖
47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
import { integer, text } from 'drizzle-orm/sqlite-core'
|
|
import { v7 as uuidv7 } from 'uuid'
|
|
|
|
// id
|
|
|
|
export const id = (name: string) => text(name)
|
|
export const pk = (name: string) =>
|
|
id(name)
|
|
.primaryKey()
|
|
.$defaultFn(() => uuidv7())
|
|
|
|
// timestamp
|
|
|
|
export const createdAt = (name = 'created_at') =>
|
|
integer(name, { mode: 'timestamp_ms' })
|
|
.notNull()
|
|
.$defaultFn(() => new Date())
|
|
|
|
export const updatedAt = (name = 'updated_at') =>
|
|
integer(name, { mode: 'timestamp_ms' })
|
|
.notNull()
|
|
.$defaultFn(() => new Date())
|
|
.$onUpdateFn(() => new Date())
|
|
|
|
// generated fields
|
|
|
|
export const generatedFields = {
|
|
id: pk('id'),
|
|
createdAt: createdAt('created_at'),
|
|
updatedAt: updatedAt('updated_at'),
|
|
}
|
|
|
|
// Helper to create omit keys from generatedFields
|
|
const createGeneratedFieldKeys = <T extends Record<string, unknown>>(
|
|
fields: T,
|
|
): Record<keyof T, true> => {
|
|
return Object.keys(fields).reduce(
|
|
(acc, key) => {
|
|
acc[key as keyof T] = true
|
|
return acc
|
|
},
|
|
{} as Record<keyof T, true>,
|
|
)
|
|
}
|
|
|
|
export const generatedFieldKeys = createGeneratedFieldKeys(generatedFields)
|