Starting to put back the server part. Currently the registration and login are almost ready.

This commit is contained in:
2024-11-05 18:09:42 +01:00
parent e8b521f122
commit 83ddaf19d4
52 changed files with 2022 additions and 118 deletions

View File

@@ -1,3 +1,4 @@
import { relations } from 'drizzle-orm';
import { int, text, sqliteTable, type SQLiteTableExtraConfig, primaryKey, blob } from 'drizzle-orm/sqlite-core';
export const usersTable = sqliteTable("users", {
@@ -5,11 +6,12 @@ export const usersTable = sqliteTable("users", {
username: text().notNull().unique(),
email: text().notNull().unique(),
hash: text().notNull().unique(),
state: int().default(0),
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", {
@@ -17,8 +19,8 @@ export const userSessionsTable = sqliteTable("user_sessions", {
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 ] }),
return {
pk: primaryKey({ columns: [table.id, table.user_id] }),
}
});
@@ -30,4 +32,19 @@ export const explorerContentTable = sqliteTable("explorer_content", {
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], }),
}));