diff --git a/src/server/db/fields.ts b/src/server/db/fields.ts index afea8cc..f7868d9 100644 --- a/src/server/db/fields.ts +++ b/src/server/db/fields.ts @@ -1,55 +1,15 @@ -import { sql } from 'drizzle-orm' import { timestamp, uuid } from 'drizzle-orm/pg-core' import { v7 as uuidv7 } from 'uuid' -// id - -const id = (name: string) => uuid(name) -export const pk = (name: string, strategy?: 'native' | 'extension') => { - switch (strategy) { - // PG 18+ - case 'native': - return id(name).primaryKey().default(sql`uuidv7()`) - - // PG 13+ with extension - case 'extension': - return id(name).primaryKey().default(sql`uuid_generate_v7()`) - - // Any PG version - default: - return id(name) - .primaryKey() - .$defaultFn(() => uuidv7()) - } -} - -// timestamp - -export const createdAt = (name = 'created_at') => timestamp(name, { withTimezone: true }).notNull().defaultNow() - -export const updatedAt = (name = 'updated_at') => - timestamp(name, { withTimezone: true }) +export const generatedFields = { + id: uuid('id') + .primaryKey() + .$defaultFn(() => uuidv7()), + createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(), + updatedAt: timestamp('updated_at', { withTimezone: true }) .notNull() .defaultNow() - .$onUpdateFn(() => new Date()) - -// generated fields - -export const generatedFields = { - id: pk('id'), - createdAt: createdAt('created_at'), - updatedAt: updatedAt('updated_at'), + .$onUpdateFn(() => new Date()), } -// Helper to create omit keys from generatedFields -const createGeneratedFieldKeys = >(fields: T): Record => { - return Object.keys(fields).reduce( - (acc, key) => { - acc[key as keyof T] = true - return acc - }, - {} as Record, - ) -} - -export const generatedFieldKeys = createGeneratedFieldKeys(generatedFields) +export const generatedFieldKeys = { id: true, createdAt: true, updatedAt: true } as const