diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index 818b050..3cb2017 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -227,6 +227,16 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => table.unique(["id"]); }, }, + { + name: "t_aiModelMap", + builder: (table) => { + table.integer("id").notNullable(); + table.integer("promptsId"); // 提示词表ID + table.integer("configId"); // 模型列表id + table.primary(["id"]); + table.unique(["id"]); + }, + }, { name: "t_prompts", builder: (table) => { diff --git a/src/router.ts b/src/router.ts index 5f27eae..5b6a132 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 4c67f0d89475e1a882416d9f6ab1687d +// @routes-hash 8ce2263d4dc5c8171785529954312b92 import { Express } from "express"; import route1 from "./routes/assets/addAssets"; @@ -44,33 +44,37 @@ import route40 from "./routes/prompt/updatePrompt"; import route41 from "./routes/script/generateScriptApi"; import route42 from "./routes/script/generateScriptSave"; import route43 from "./routes/script/geScriptApi"; -import route44 from "./routes/setting/getSetting"; -import route45 from "./routes/setting/updateSetting"; -import route46 from "./routes/storyboard/batchSuperScoreImage"; -import route47 from "./routes/storyboard/chatStoryboard"; -import route48 from "./routes/storyboard/generateShotImage"; -import route49 from "./routes/storyboard/generateStoryboardApi"; -import route50 from "./routes/storyboard/generateVideoPrompt"; -import route51 from "./routes/storyboard/getStoryboard"; -import route52 from "./routes/storyboard/keepStoryboard"; -import route53 from "./routes/storyboard/saveStoryboard"; -import route54 from "./routes/storyboard/uploadImage"; -import route55 from "./routes/task/getTaskApi"; -import route56 from "./routes/task/taskDetails"; -import route57 from "./routes/user/getUser"; -import route58 from "./routes/video/addVideo"; -import route59 from "./routes/video/addVideoConfig"; -import route60 from "./routes/video/deleteVideoConfig"; -import route61 from "./routes/video/generatePrompt"; -import route62 from "./routes/video/generateVideo"; -import route63 from "./routes/video/getManufacturer"; -import route64 from "./routes/video/getVideo"; -import route65 from "./routes/video/getVideoConfigs"; -import route66 from "./routes/video/getVideoModel"; -import route67 from "./routes/video/getVideoStoryboards"; -import route68 from "./routes/video/reviseVideoStoryboards"; -import route69 from "./routes/video/saveVideo"; -import route70 from "./routes/video/upDateVideoConfig"; +import route44 from "./routes/setting/addModel"; +import route45 from "./routes/setting/configurationModel"; +import route46 from "./routes/setting/delModel"; +import route47 from "./routes/setting/getAiModelMap"; +import route48 from "./routes/setting/getSetting"; +import route49 from "./routes/setting/updeteModel"; +import route50 from "./routes/storyboard/batchSuperScoreImage"; +import route51 from "./routes/storyboard/chatStoryboard"; +import route52 from "./routes/storyboard/generateShotImage"; +import route53 from "./routes/storyboard/generateStoryboardApi"; +import route54 from "./routes/storyboard/generateVideoPrompt"; +import route55 from "./routes/storyboard/getStoryboard"; +import route56 from "./routes/storyboard/keepStoryboard"; +import route57 from "./routes/storyboard/saveStoryboard"; +import route58 from "./routes/storyboard/uploadImage"; +import route59 from "./routes/task/getTaskApi"; +import route60 from "./routes/task/taskDetails"; +import route61 from "./routes/user/getUser"; +import route62 from "./routes/video/addVideo"; +import route63 from "./routes/video/addVideoConfig"; +import route64 from "./routes/video/deleteVideoConfig"; +import route65 from "./routes/video/generatePrompt"; +import route66 from "./routes/video/generateVideo"; +import route67 from "./routes/video/getManufacturer"; +import route68 from "./routes/video/getVideo"; +import route69 from "./routes/video/getVideoConfigs"; +import route70 from "./routes/video/getVideoModel"; +import route71 from "./routes/video/getVideoStoryboards"; +import route72 from "./routes/video/reviseVideoStoryboards"; +import route73 from "./routes/video/saveVideo"; +import route74 from "./routes/video/upDateVideoConfig"; export default async (app: Express) => { app.use("/assets/addAssets", route1); @@ -116,31 +120,35 @@ export default async (app: Express) => { app.use("/script/generateScriptApi", route41); app.use("/script/generateScriptSave", route42); app.use("/script/geScriptApi", route43); - app.use("/setting/getSetting", route44); - app.use("/setting/updateSetting", route45); - app.use("/storyboard/batchSuperScoreImage", route46); - app.use("/storyboard/chatStoryboard", route47); - app.use("/storyboard/generateShotImage", route48); - app.use("/storyboard/generateStoryboardApi", route49); - app.use("/storyboard/generateVideoPrompt", route50); - app.use("/storyboard/getStoryboard", route51); - app.use("/storyboard/keepStoryboard", route52); - app.use("/storyboard/saveStoryboard", route53); - app.use("/storyboard/uploadImage", route54); - app.use("/task/getTaskApi", route55); - app.use("/task/taskDetails", route56); - app.use("/user/getUser", route57); - app.use("/video/addVideo", route58); - app.use("/video/addVideoConfig", route59); - app.use("/video/deleteVideoConfig", route60); - app.use("/video/generatePrompt", route61); - app.use("/video/generateVideo", route62); - app.use("/video/getManufacturer", route63); - app.use("/video/getVideo", route64); - app.use("/video/getVideoConfigs", route65); - app.use("/video/getVideoModel", route66); - app.use("/video/getVideoStoryboards", route67); - app.use("/video/reviseVideoStoryboards", route68); - app.use("/video/saveVideo", route69); - app.use("/video/upDateVideoConfig", route70); + app.use("/setting/addModel", route44); + app.use("/setting/configurationModel", route45); + app.use("/setting/delModel", route46); + app.use("/setting/getAiModelMap", route47); + app.use("/setting/getSetting", route48); + app.use("/setting/updeteModel", route49); + app.use("/storyboard/batchSuperScoreImage", route50); + app.use("/storyboard/chatStoryboard", route51); + app.use("/storyboard/generateShotImage", route52); + app.use("/storyboard/generateStoryboardApi", route53); + app.use("/storyboard/generateVideoPrompt", route54); + app.use("/storyboard/getStoryboard", route55); + app.use("/storyboard/keepStoryboard", route56); + app.use("/storyboard/saveStoryboard", route57); + app.use("/storyboard/uploadImage", route58); + app.use("/task/getTaskApi", route59); + app.use("/task/taskDetails", route60); + app.use("/user/getUser", route61); + app.use("/video/addVideo", route62); + app.use("/video/addVideoConfig", route63); + app.use("/video/deleteVideoConfig", route64); + app.use("/video/generatePrompt", route65); + app.use("/video/generateVideo", route66); + app.use("/video/getManufacturer", route67); + app.use("/video/getVideo", route68); + app.use("/video/getVideoConfigs", route69); + app.use("/video/getVideoModel", route70); + app.use("/video/getVideoStoryboards", route71); + app.use("/video/reviseVideoStoryboards", route72); + app.use("/video/saveVideo", route73); + app.use("/video/upDateVideoConfig", route74); } diff --git a/src/routes/setting/addModel.ts b/src/routes/setting/addModel.ts new file mode 100644 index 0000000..715f5f3 --- /dev/null +++ b/src/routes/setting/addModel.ts @@ -0,0 +1,33 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + type: z.string(), + name: z.string(), + model: z.string(), + baseUrl: z.string(), + apiKey: z.string(), + manufacturer: z.string(), + }), + async (req, res) => { + const { type, name, model, baseUrl, apiKey, manufacturer } = req.body; + + await u.db("t_config").insert({ + type, + name, + model, + baseUrl, + apiKey, + manufacturer, + createTime: Date.now(), + userId: 1, + }); + res.status(200).send(success("新增成功")); + }, +); diff --git a/src/routes/setting/configurationModel.ts b/src/routes/setting/configurationModel.ts new file mode 100644 index 0000000..1a56c47 --- /dev/null +++ b/src/routes/setting/configurationModel.ts @@ -0,0 +1,30 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + id: z.number().optional(), + promptsId: z.number(), + configId: z.number(), + }), + async (req, res) => { + const { id, promptsId, configId } = req.body; + if (id) { + await u.db("t_aiModelMap").where("id", id).update({ + promptsId, + configId, + }); + } else { + await u.db("t_aiModelMap").insert({ + promptsId, + configId, + }); + } + res.status(200).send(success("配置成功")); + }, +); diff --git a/src/routes/setting/delModel.ts b/src/routes/setting/delModel.ts new file mode 100644 index 0000000..718eca7 --- /dev/null +++ b/src/routes/setting/delModel.ts @@ -0,0 +1,19 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + id: z.number(), + }), + async (req, res) => { + const { id } = req.body; + await u.db("t_config").where("id", id).delete(); + await u.db("t_aiModelMap").where("configId", id).delete(); + res.status(200).send(success("删除成功")); + }, +); diff --git a/src/routes/setting/getAiModelMap.ts b/src/routes/setting/getAiModelMap.ts new file mode 100644 index 0000000..4e0b056 --- /dev/null +++ b/src/routes/setting/getAiModelMap.ts @@ -0,0 +1,13 @@ +import express from "express"; +import u from "@/utils"; +import { success } from "@/lib/responseFormat"; +const router = express.Router(); + +export default router.post("/", async (req, res) => { + const configData = await u + .db("t_prompts") + .leftJoin("t_aiModelMap", "t_prompts.id", "t_aiModelMap.promptsId") + .leftJoin("t_config", "t_config.id", "t_aiModelMap.configId") + .select("t_prompts.id as promptsId", "t_prompts.code", "t_prompts.name", "t_config.model", "t_aiModelMap.id"); + res.status(200).send(success(configData)); +}); diff --git a/src/routes/setting/getSetting.ts b/src/routes/setting/getSetting.ts index 9763f58..e004d7a 100644 --- a/src/routes/setting/getSetting.ts +++ b/src/routes/setting/getSetting.ts @@ -1,29 +1,11 @@ import express from "express"; import u from "@/utils"; -import { z } from "zod"; import { success } from "@/lib/responseFormat"; -import { validateFields } from "@/middleware/middleware"; const router = express.Router(); -export default router.post( - "/", - validateFields({ - userId: z.number(), - }), - async (req, res) => { - const { userId } = req.body; +export default router.post("/", async (req, res) => { + const userId = 1; + const configData = await u.db("t_config").where("userId", userId).select("*"); - const settingData = await u.db("t_setting").select("*"); - - const configData = await u.db("t_config").where("userId", userId).select("*"); - - const parsedData = settingData.map((item) => ({ - ...item, - imageModel: configData.find((i) => i.type == "image"), - languageModel: configData.find((i) => i.type == "text"), - videoModel: configData.filter((i) => i.type == "video").filter(Boolean), - })); - - res.status(200).send(success(parsedData)); - }, -); + res.status(200).send(success(configData)); +}); diff --git a/src/routes/setting/updateSetting.ts b/src/routes/setting/updateSetting.ts deleted file mode 100644 index e39e0e1..0000000 --- a/src/routes/setting/updateSetting.ts +++ /dev/null @@ -1,79 +0,0 @@ -import express from "express"; -import u from "@/utils"; -import { z } from "zod"; -import { success } from "@/lib/responseFormat"; -import { validateFields } from "@/middleware/middleware"; -const router = express.Router(); - -// 修改全局配置 -export default router.post( - "/", - validateFields({ - userId: z.number(), - imageModel: z.object().optional(), - videoModel: z.array(z.object()).optional(), - languageModel: z.object().optional(), - name: z.string().optional(), - password: z.string().optional(), - }), - async (req, res) => { - const { userId, imageModel, videoModel, languageModel, name, password } = req.body; - - await u - .db("t_setting") - .where("userId", userId) - .update({ - imageModel: JSON.stringify(imageModel), - languageModel: JSON.stringify(languageModel), - }); - - if (videoModel) { - await u.db("t_config").where("type", "video").delete(); - - for (const item of videoModel) { - await u.db("t_config").insert({ - type: "video", - name: item.model, - model: item.model, - apiKey: item.apiKey, - baseUrl: item.baseUrl, - createTime: Date.now(), - userId, - manufacturer: item.manufacturer, - }); - } - } - if (languageModel) { - await u.db("t_config").where("type", "text").delete(); - await u.db("t_config").insert({ - type: "text", - name: languageModel.model, - model: languageModel.model, - apiKey: languageModel.apiKey, - baseUrl: languageModel.baseUrl, - createTime: Date.now(), - userId, - manufacturer: languageModel.manufacturer, - }); - } - if (imageModel) { - await u.db("t_config").where("type", "image").delete(); - await u.db("t_config").insert({ - type: "image", - name: imageModel.model, - model: imageModel.model, - apiKey: imageModel.apiKey, - baseUrl: imageModel.baseUrl, - createTime: Date.now(), - userId, - manufacturer: imageModel.manufacturer, - }); - } - await u.db("t_user").where("id", userId).update({ - name, - password, - }); - - res.status(200).send(success({ message: "修改全局配置成功" })); - }, -); diff --git a/src/routes/setting/updeteModel.ts b/src/routes/setting/updeteModel.ts new file mode 100644 index 0000000..be1ca28 --- /dev/null +++ b/src/routes/setting/updeteModel.ts @@ -0,0 +1,32 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + id: z.number(), + type: z.string(), + name: z.string(), + model: z.string(), + baseUrl: z.string(), + apiKey: z.string(), + manufacturer: z.string(), + }), + async (req, res) => { + const { id, type, name, model, baseUrl, apiKey, manufacturer } = req.body; + + await u.db("t_config").where("id", id).update({ + type, + name, + model, + baseUrl, + apiKey, + manufacturer, + }); + res.status(200).send(success("编辑成功")); + }, +);