50 lines
2.3 KiB
TypeScript
50 lines
2.3 KiB
TypeScript
import { relations } from 'drizzle-orm';
|
|
import { int, text, sqliteTable, type SQLiteTableExtraConfig, primaryKey, blob } from 'drizzle-orm/sqlite-core';
|
|
|
|
export const usersTable = sqliteTable("users", {
|
|
id: int().primaryKey({ autoIncrement: true }),
|
|
username: text().notNull().unique(),
|
|
email: text().notNull().unique(),
|
|
hash: text().notNull().unique(),
|
|
state: int().notNull().default(0),
|
|
});
|
|
|
|
export const usersDataTable = sqliteTable("users_data", {
|
|
id: int().primaryKey().references(() => usersTable.id, { onDelete: 'cascade', onUpdate: 'cascade' }),
|
|
signin: int({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
|
|
});
|
|
|
|
export const userSessionsTable = sqliteTable("user_sessions", {
|
|
id: int().notNull(),
|
|
user_id: int().notNull().references(() => usersTable.id, { onDelete: 'cascade', onUpdate: 'cascade' }),
|
|
timestamp: int({ mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),
|
|
}, (table): SQLiteTableExtraConfig => {
|
|
return {
|
|
pk: primaryKey({ columns: [table.id, table.user_id] }),
|
|
}
|
|
});
|
|
|
|
export const explorerContentTable = sqliteTable("explorer_content", {
|
|
path: text().primaryKey(),
|
|
owner: int().notNull().references(() => usersTable.id, { onDelete: 'cascade', onUpdate: 'cascade' }),
|
|
title: text().notNull(),
|
|
type: text({ enum: ['file', 'folder', 'markdown', 'canvas'] }).notNull(),
|
|
content: blob({ mode: 'buffer' }),
|
|
navigable: int({ mode: 'boolean' }).default(true),
|
|
private: int({ mode: 'boolean' }).default(false),
|
|
});
|
|
|
|
export const usersRelation = relations(usersTable, ({one, many}) => ({
|
|
data: one(usersDataTable, { fields: [usersTable.id], references: [usersDataTable.id], }),
|
|
session: many(userSessionsTable),
|
|
content: many(explorerContentTable),
|
|
}));
|
|
export const usersDataRelation = relations(usersDataTable, ({one}) => ({
|
|
users: one(usersTable, { fields: [usersDataTable.id], references: [usersTable.id], }),
|
|
}));
|
|
export const userSessionsRelation = relations(userSessionsTable, ({one}) => ({
|
|
users: one(usersTable, { fields: [userSessionsTable.user_id], references: [usersTable.id], }),
|
|
}));
|
|
export const explorerContentRelation = relations(explorerContentTable, ({one}) => ({
|
|
users: one(usersTable, { fields: [explorerContentTable.owner], references: [usersTable.id], }),
|
|
})); |