91 lines
3.3 KiB
TypeScript
91 lines
3.3 KiB
TypeScript
import {
|
||
bigint, // BIGINT (大整数, -2^63 到 2^63-1)
|
||
bigserial, // BIGSERIAL (自增大整数, 1 到 2^63-1)
|
||
boolean, // BOOLEAN (布尔值)
|
||
char, // CHAR (定长字符串)
|
||
check, // 定义检查约束
|
||
date, // DATE (日期)
|
||
decimal, // DECIMAL/NUMERIC (精确数字, 指定 precision 和 scale)
|
||
doublePrecision, // DOUBLE PRECISION (双精度浮点数, 8字节)
|
||
foreignKey, // 定义外键
|
||
index, // 创建索引
|
||
integer, // INTEGER (整数, -2^31 到 2^31-1)
|
||
interval, // INTERVAL (时间间隔)
|
||
json, // JSON (JSON 数据)
|
||
jsonb, // JSONB (二进制 JSON, 推荐使用)
|
||
numeric, // NUMERIC (同 decimal)
|
||
pgEnum, // 定义枚举类型 (PostgreSQL ENUM)
|
||
pgMaterializedView, // 创建物化视图
|
||
pgPolicy, // 定义行级安全策略
|
||
pgRole, // 定义角色
|
||
pgSequence, // 创建序列
|
||
pgTable, // 定义表
|
||
pgTableCreator, // 创建自定义表名生成器的表定义函数
|
||
pgView, // 创建视图
|
||
primaryKey, // 定义主键
|
||
serial, // SERIAL (自增整数, 1 到 2^31-1)
|
||
text, // TEXT (变长字符串, 无长度限制)
|
||
time, // TIME (时间)
|
||
timestamp, // TIMESTAMP (日期时间, 无时区)
|
||
unique, // 定义唯一约束
|
||
uniqueIndex, // 创建唯一索引
|
||
uuid, // UUID (通用唯一标识符)
|
||
varchar, // VARCHAR (变长字符串, 指定长度)
|
||
} from "drizzle-orm/pg-core";
|
||
|
||
import { sql } from "drizzle-orm";
|
||
|
||
import { id, createdAt, updatedAt } from "../common";
|
||
|
||
// 引用其他schema中的表
|
||
import { user } from "./auth.db";
|
||
import { attributeFile } from "./basic.db";
|
||
|
||
// 枚举定义
|
||
export const generationStatusEnum = pgEnum("generation_status", [
|
||
"pending",
|
||
"processing",
|
||
"completed",
|
||
"failed"
|
||
]);
|
||
|
||
// 项目表:用户创建的项目
|
||
export const nvwaProject = pgTable("nvwa_project", {
|
||
id,
|
||
name: varchar("name", { length: 255 }).notNull(),
|
||
description: text("description"),
|
||
userId: text("user_id")
|
||
.notNull()
|
||
.references(() => user.id, { onDelete: "cascade" }),
|
||
createdAt,
|
||
updatedAt,
|
||
});
|
||
|
||
// 线框图表:属于项目的线框图,包含画布数据和描述
|
||
export const nvwaWireframe = pgTable("nvwa_wireframe", {
|
||
id,
|
||
projectId: integer("project_id")
|
||
.notNull()
|
||
.references(() => nvwaProject.id, { onDelete: "cascade" }),
|
||
name: varchar("name", { length: 255 }).notNull(),
|
||
canvasData: jsonb("canvas_data"), // 存储画布上的元素和布局数据
|
||
description: text("description"), // 用户输入的文本描述,用于指导AI生成
|
||
uploadedFileId: integer("uploaded_file_id").references(() => attributeFile.id, { onDelete: "set null" }), // 上传的草图文件ID
|
||
createdAt,
|
||
updatedAt,
|
||
});
|
||
|
||
// 生成表:AI生成的任务和结果
|
||
export const nvwaGeneration = pgTable("nvwa_generation", {
|
||
id,
|
||
wireframeId: integer("wireframe_id")
|
||
.notNull()
|
||
.references(() => nvwaWireframe.id, { onDelete: "cascade" }),
|
||
prompt: text("prompt").notNull(), // AI生成的提示词
|
||
status: generationStatusEnum("status").default("pending").notNull(),
|
||
generatedImageUrl: varchar("generated_image_url", { length: 500 }), // 生成的图像URL
|
||
errorMessage: text("error_message"), // 如果生成失败,存储错误信息
|
||
createdAt,
|
||
updatedAt,
|
||
});
|