79 lines
2.0 KiB
TypeScript
79 lines
2.0 KiB
TypeScript
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" }).$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],
|
|
}),
|
|
}));
|