33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
import { sql } from "drizzle-orm";
|
||
import { integer, sqliteTable, text, uniqueIndex } from "drizzle-orm/sqlite-core";
|
||
import { users } from "./users.js";
|
||
|
||
export const mounts = sqliteTable(
|
||
"mounts",
|
||
{
|
||
id: text("id")
|
||
.primaryKey()
|
||
.$defaultFn(() => crypto.randomUUID()),
|
||
userId: text("user_id")
|
||
.notNull()
|
||
.references(() => users.id, { onDelete: "cascade" }),
|
||
name: text("name").notNull(),
|
||
type: text("type").notNull().default("webdav"),
|
||
baseUrl: text("base_url").notNull(),
|
||
username: text("username"),
|
||
/** AES-GCM 密文(base64),永不回传前端 */
|
||
secretEnc: text("secret_enc").notNull().default(""),
|
||
rootPath: text("root_path").notNull().default("/"),
|
||
enabled: integer("enabled", { mode: "boolean" }).notNull().default(true),
|
||
createdAt: integer("created_at", { mode: "timestamp" })
|
||
.notNull()
|
||
.default(sql`(unixepoch())`),
|
||
updatedAt: integer("updated_at", { mode: "timestamp" })
|
||
.notNull()
|
||
.default(sql`(unixepoch())`),
|
||
},
|
||
(t) => [uniqueIndex("mounts_user_name_uq").on(t.userId, t.name)],
|
||
);
|
||
export type Mount = typeof mounts.$inferSelect;
|
||
export type NewMount = typeof mounts.$inferInsert;
|