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/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("编辑成功")); + }, +);