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 = >( 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)