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, });