52 lines
2 KiB
TypeScript
Executable file
52 lines
2 KiB
TypeScript
Executable file
import {
|
|
integer,
|
|
pgTable,
|
|
varchar,
|
|
timestamp,
|
|
boolean,
|
|
real,
|
|
index
|
|
} from "drizzle-orm/pg-core";
|
|
|
|
export const usersTable = pgTable("users", {
|
|
telegramId: varchar({ length: 255 }).notNull().primaryKey(),
|
|
username: varchar({ length: 255 }).notNull(),
|
|
firstName: varchar({ length: 255 }).notNull(),
|
|
lastName: varchar({ length: 255 }).notNull(),
|
|
aiEnabled: boolean().notNull().default(false),
|
|
showThinking: boolean().notNull().default(false),
|
|
customAiModel: varchar({ length: 255 }).notNull().default("deepseek-r1:1.5b"),
|
|
aiTemperature: real().notNull().default(0.9),
|
|
aiRequests: integer().notNull().default(0),
|
|
aiCharacters: integer().notNull().default(0),
|
|
disabledCommands: varchar({ length: 255 }).array().notNull().default([]),
|
|
languageCode: varchar({ length: 255 }).notNull(),
|
|
aiTimeoutUntil: timestamp(),
|
|
aiMaxExecutionTime: integer().default(0),
|
|
createdAt: timestamp().notNull().defaultNow(),
|
|
updatedAt: timestamp().notNull().defaultNow(),
|
|
});
|
|
|
|
export const twoFactorTable = pgTable("two_factor", {
|
|
userId: varchar({ length: 255 }).notNull().references(() => usersTable.telegramId).primaryKey(),
|
|
currentCode: varchar({ length: 255 }).notNull(),
|
|
codeExpiresAt: timestamp().notNull(),
|
|
codeAttempts: integer().notNull().default(0),
|
|
createdAt: timestamp().notNull().defaultNow(),
|
|
updatedAt: timestamp().notNull().defaultNow(),
|
|
}, (table) => [
|
|
index("idx_two_factor_user_id").on(table.userId),
|
|
index("idx_two_factor_code_expires_at").on(table.codeExpiresAt),
|
|
]);
|
|
|
|
export const sessionsTable = pgTable("sessions", {
|
|
id: varchar({ length: 255 }).notNull().primaryKey(),
|
|
userId: varchar({ length: 255 }).notNull().references(() => usersTable.telegramId),
|
|
sessionToken: varchar({ length: 255 }).notNull().unique(),
|
|
expiresAt: timestamp().notNull(),
|
|
createdAt: timestamp().notNull().defaultNow(),
|
|
updatedAt: timestamp().notNull().defaultNow(),
|
|
}, (table) => [
|
|
index("idx_sessions_user_id").on(table.userId),
|
|
index("idx_sessions_expires_at").on(table.expiresAt),
|
|
]);
|