58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import express from "express";
|
|
import { success, error } from "@/lib/responseFormat";
|
|
import { validateFields } from "@/middleware/middleware";
|
|
import u from "@/utils";
|
|
import { z } from "zod";
|
|
import { getEditableVendorModels, requireRequestUserId, setUserVendorConfig } from "@/lib/userConfig";
|
|
const router = express.Router();
|
|
|
|
export default router.post(
|
|
"/",
|
|
validateFields({
|
|
id: z.string(),
|
|
model: z.discriminatedUnion("type", [
|
|
z.object({
|
|
name: z.string(),
|
|
modelName: z.string(),
|
|
type: z.literal("text"),
|
|
think: z.boolean(),
|
|
}),
|
|
z.object({
|
|
name: z.string(),
|
|
modelName: z.string(),
|
|
type: z.literal("image"),
|
|
mode: z.array(z.enum(["text", "singleImage", "multiReference"])),
|
|
}),
|
|
z.object({
|
|
name: z.string(),
|
|
modelName: z.string(),
|
|
type: z.literal("video"),
|
|
mode: z.array(
|
|
z.union([
|
|
z.enum(["singleImage", "startEndRequired", "endFrameOptional", "startFrameOptional", "text", "audioReference", "videoReference"]),
|
|
z.array(z.string().regex(/^(videoReference|imageReference|audioReference):\d+$/)),
|
|
]),
|
|
),
|
|
audio: z.union([z.literal("optional"), z.boolean()]),
|
|
durationResolutionMap: z.array(
|
|
z.object({
|
|
duration: z.array(z.number()),
|
|
resolution: z.array(z.string()),
|
|
}),
|
|
),
|
|
}),
|
|
]),
|
|
}),
|
|
async (req, res) => {
|
|
const { id, model } = req.body;
|
|
const userId = requireRequestUserId(req);
|
|
|
|
const existingModels = await getEditableVendorModels(userId, id);
|
|
existingModels.push(model);
|
|
await setUserVendorConfig(userId, id, {
|
|
models: JSON.stringify(existingModels),
|
|
});
|
|
res.status(200).send(success("更新成功"));
|
|
},
|
|
);
|