fix types infer

This commit is contained in:
BennyKok 2023-12-15 14:02:00 +08:00
parent 5b4043c367
commit eb6ef74f8a
2 changed files with 42 additions and 24 deletions

View File

@ -1,6 +1,11 @@
import { parseDataSafe } from "../../../lib/parseDataSafe";
import { db } from "@/db/db"; import { db } from "@/db/db";
import { workflowTable, workflowVersionTable } from "@/db/schema"; import {
workflowAPIType,
workflowTable,
workflowType,
workflowVersionTable,
} from "@/db/schema";
import { parseDataSafe } from "@/lib/parseDataSafe";
import { sql } from "drizzle-orm"; import { sql } from "drizzle-orm";
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
import { z } from "zod"; import { z } from "zod";
@ -15,8 +20,8 @@ const UploadRequest = z.object({
user_id: z.string(), user_id: z.string(),
workflow_id: z.string().optional(), workflow_id: z.string().optional(),
workflow_name: z.string().optional(), workflow_name: z.string().optional(),
workflow: z.any(), workflow: workflowType,
workflow_api: z.any(), workflow_api: workflowAPIType,
}); });
export async function OPTIONS(request: Request) { export async function OPTIONS(request: Request) {
@ -41,7 +46,15 @@ export async function POST(request: Request) {
if (!data || error) return error; if (!data || error) return error;
let { user_id, workflow, workflow_api, workflow_id, workflow_name } = data; const {
user_id,
workflow,
workflow_api,
workflow_id: _workflow_id,
workflow_name,
} = data;
let workflow_id = _workflow_id;
let version = -1; let version = -1;
@ -49,7 +62,7 @@ export async function POST(request: Request) {
try { try {
if ((!workflow_id || workflow_id.length == 0) && workflow_name) { if ((!workflow_id || workflow_id.length == 0) && workflow_name) {
// Create a new parent workflow // Create a new parent workflow
const workflow = await db const workflow_parent = await db
.insert(workflowTable) .insert(workflowTable)
.values({ .values({
user_id, user_id,
@ -57,7 +70,7 @@ export async function POST(request: Request) {
}) })
.returning(); .returning();
workflow_id = workflow[0].id; workflow_id = workflow_parent[0].id;
// Create a new version // Create a new version
const data = await db const data = await db
@ -76,7 +89,7 @@ export async function POST(request: Request) {
.insert(workflowVersionTable) .insert(workflowVersionTable)
.values({ .values({
workflow_id, workflow_id,
workflow, workflow: workflow,
workflow_api, workflow_api,
// version: sql`${workflowVersionTable.version} + 1`, // version: sql`${workflowVersionTable.version} + 1`,
version: sql`( version: sql`(

View File

@ -8,6 +8,7 @@ import {
jsonb, jsonb,
pgEnum, pgEnum,
} from "drizzle-orm/pg-core"; } from "drizzle-orm/pg-core";
import { z } from "zod";
export const dbSchema = pgSchema("comfyui_deploy"); export const dbSchema = pgSchema("comfyui_deploy");
@ -35,21 +36,25 @@ export const workflowRelations = relations(workflowTable, ({ many }) => ({
versions: many(workflowVersionTable), versions: many(workflowVersionTable),
})); }));
export type WorkflowJSONType = { export const workflowType = z.any();
nodes: { // export const workflowType = z.object({
id: string; // last_node_id: z.number(),
type: string; // last_link_id: z.number(),
widgets_values: any[]; // nodes: z.array(
}[]; // z.object({
}; // id: z.number(),
// type: z.string(),
// widgets_values: z.array(z.any()),
// })
// ),
// });
export type WorkflowAPIType = Record< export const workflowAPIType = z.record(
string, z.object({
{ inputs: z.record(z.any()),
inputs: Record<string, string>; class_type: z.string(),
class_type: string; })
} );
>;
export const workflowVersionTable = dbSchema.table("workflow_versions", { export const workflowVersionTable = dbSchema.table("workflow_versions", {
workflow_id: uuid("workflow_id") workflow_id: uuid("workflow_id")
@ -58,8 +63,8 @@ export const workflowVersionTable = dbSchema.table("workflow_versions", {
onDelete: "cascade", onDelete: "cascade",
}), }),
id: uuid("id").primaryKey().defaultRandom().notNull(), id: uuid("id").primaryKey().defaultRandom().notNull(),
workflow: jsonb("workflow").$type<WorkflowJSONType>(), workflow: jsonb("workflow").$type<z.infer<typeof workflowType>>(),
workflow_api: jsonb("workflow_api").$type<WorkflowAPIType>(), workflow_api: jsonb("workflow_api").$type<z.infer<typeof workflowAPIType>>(),
version: integer("version").notNull(), version: integer("version").notNull(),
created_at: timestamp("created_at").defaultNow().notNull(), created_at: timestamp("created_at").defaultNow().notNull(),