import { relations } from "drizzle-orm"; import { sqliteTable, text, integer, numeric } from "drizzle-orm/sqlite-core"; export const users = sqliteTable("users", { id: numeric("id").primaryKey(), name: text("name").notNull(), avatar: text("avatar"), city: text("city"), country: text("country"), sex: text("sex"), weight: integer("weight"), createdAt: integer("created_at", { mode: "timestamp" }) .notNull() .$defaultFn(() => new Date()), }); export const preferences = sqliteTable("preferences", { id: integer("id").primaryKey({ autoIncrement: true }), userId: numeric("user_id") .references(() => users.id, { onDelete: "cascade", }) .unique(), data: text("data", { mode: "json" }) .$type<{ enabled: boolean; language: string; units: "Imperial" | "Metric"; tone?: string[]; highlights?: string[]; }>() .$defaultFn(() => ({ enabled: true, language: "English", units: "Metric", tone: [], highlights: [], })), }); export const tokens = sqliteTable("tokens", { id: integer("id").primaryKey({ autoIncrement: true }), userId: numeric("user_id") .references(() => users.id, { onDelete: "cascade", }) .unique(), refreshToken: text("refresh_token"), accessToken: text("access_token"), expiresAt: integer("expires_at", { mode: "timestamp" }) .notNull() .$defaultFn(() => new Date()), }); export const usersRelations = relations(users, ({ one }) => ({ tokens: one(tokens, { fields: [users.id], references: [tokens.userId], }), preferences: one(preferences, { fields: [users.id], references: [preferences.userId], }), })); export const preferencesRelations = relations(preferences, ({ one }) => ({ user: one(users, { fields: [preferences.userId], references: [users.id], }), })); export const tokensRelations = relations(tokens, ({ one }) => ({ user: one(users, { fields: [tokens.userId], references: [users.id], }), }));