memorium/lib/db/schema.ts

82 lines
2.0 KiB
TypeScript

import {
blob,
index,
int,
integer,
sqliteTable,
text,
} from "drizzle-orm/sqlite-core";
import { sql } from "drizzle-orm/sql";
export const userTable = sqliteTable("user", {
id: text()
.primaryKey(),
createdAt: integer("created_at", { mode: "timestamp" })
.default(sql`(current_timestamp)`)
.notNull(),
email: text()
.notNull(),
name: text()
.notNull(),
});
export const sessionTable = sqliteTable("session", {
id: text("id")
.primaryKey(),
createdAt: integer("created_at", { mode: "timestamp_ms" }).default(
sql`(current_timestamp)`,
),
expiresAt: integer("expires_at", { mode: "timestamp" })
.notNull(),
userId: text("user_id")
.notNull(),
});
export const performanceTable = sqliteTable("performance", {
path: text().notNull(),
search: text(),
time: int().notNull(),
createdAt: integer("created_at", {
mode: "timestamp_ms",
}).default(sql`(STRFTIME('%s', 'now') * 1000)`),
});
export const imageTable = sqliteTable("image", {
createdAt: integer("created_at", { mode: "timestamp" }).default(
sql`(current_timestamp)`,
),
url: text().notNull(),
average: text().notNull(),
blurhash: text().notNull(),
mime: text().notNull(),
});
export const documentTable = sqliteTable("document", {
name: text().notNull().primaryKey(),
lastModified: integer("last_modified").notNull(),
content: text(),
contentType: text("content_type").notNull(),
size: integer().notNull(),
perm: text().notNull(),
}, (table) => {
return [
index("name_idx").on(table.name),
];
});
export const cacheTable = sqliteTable("cache", {
scope: text().notNull(),
key: text().notNull().primaryKey(),
json: text({ mode: "json" }),
binary: blob(),
createdAt: integer("created_at", { mode: "timestamp" }).default(
sql`(current_timestamp)`,
),
expiresAt: integer("expires_at", { mode: "timestamp" }),
}, (table) => {
return [
index("key_idx").on(table.key),
index("scope_idx").on(table.scope),
];
});