import { relations, sql } from "drizzle-orm"; import { text, sqliteTable, integer, primaryKey } from "drizzle-orm/sqlite-core"; export const groupTable = sqliteTable("groups", { id: integer().primaryKey(), name: text().notNull(), }); export const groupRelations = relations(groupTable, ({ many }) => ({ members: many(groupMembershipTable), })); export const userTable = sqliteTable("users", { id: integer().primaryKey(), name: text().unique().notNull(), passkey: text(), passkeyId: text("passkey_id").notNull(), }); export const userRelations = relations(userTable, ({ many }) => ({ groups: many(groupMembershipTable), })); export const groupMembershipTable = sqliteTable("users_groups", { userId: integer("user_id").notNull().references(() => userTable.id), groupId: integer("group_id").notNull().references(() => groupTable.id), }, table => [primaryKey({ columns: [table.userId, table.groupId] })]); export const groupMembershipRelations = relations(groupMembershipTable, ({ one }) => ({ group: one(groupTable, { fields: [groupMembershipTable.groupId], references: [groupTable.id] }), user: one(userTable, { fields: [groupMembershipTable.userId], references: [userTable.id] }), })); export const sessionTable = sqliteTable("sessions", { id: integer().primaryKey(), uuid: text().unique().notNull(), userId: integer("user_id").notNull(), lastUse: integer("last_use", { mode: "timestamp" }).notNull().default(sql`(unixepoch())`), }); export const sessionRelations = relations(sessionTable, ({ one }) => ({ user: one(userTable, { fields: [sessionTable.userId], references: [userTable.id] }), })); export const webauthnChallenges = sqliteTable("webauthn_challenges", { id: integer().primaryKey(), challenge: text().notNull(), key: text().notNull(), });