diff --git a/src/lib/initDB.ts b/src/lib/initDB.ts index 283b4cd..a17a7a5 100644 --- a/src/lib/initDB.ts +++ b/src/lib/initDB.ts @@ -43,6 +43,7 @@ export default async (knex: Knex, forceInit: boolean = false): Promise => table.integer("createTime"); table.integer("userId"); table.primary(["id"]); + table.unique(["id"]); }, }, //风格表 diff --git a/src/router.ts b/src/router.ts index e0a04e7..d39a84d 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 3cbcda6d972e36e9b07574fae186340d +// @routes-hash b30811db41d0eeddfa32d16c9b5856b9 import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -11,130 +11,131 @@ import route7 from "./routes/assets/addAssets"; import route8 from "./routes/assets/batchDelete"; import route9 from "./routes/assets/batchGenerationData"; import route10 from "./routes/assets/delAssets"; -import route11 from "./routes/assets/getAssetsApi"; -import route12 from "./routes/assets/getImage"; -import route13 from "./routes/assets/getMaterialData"; -import route14 from "./routes/assets/pollingImageAssets"; -import route15 from "./routes/assets/pollingPromptAssets"; -import route16 from "./routes/assets/saveAssets"; -import route17 from "./routes/assets/updateAssets"; -import route18 from "./routes/assets/uploadClip"; -import route19 from "./routes/assetsGenerate/batchGenerateImageAssets"; -import route20 from "./routes/assetsGenerate/batchPolishAssetsPrompt"; -import route21 from "./routes/assetsGenerate/generateAssets"; -import route22 from "./routes/assetsGenerate/polishAssetsPrompt"; -import route23 from "./routes/cornerScape/getAllAssets"; -import route24 from "./routes/general/generalStatistics"; -import route25 from "./routes/general/getSingleProject"; -import route26 from "./routes/general/updateProject"; -import route27 from "./routes/login/login"; -import route28 from "./routes/migrate/migrateData"; -import route29 from "./routes/modelSelect/getModelDetail"; -import route30 from "./routes/modelSelect/getModelList"; -import route31 from "./routes/novel/addNovel"; -import route32 from "./routes/novel/batchDeleteNovel"; -import route33 from "./routes/novel/delNovel"; -import route34 from "./routes/novel/event/batchDeleteEvent"; -import route35 from "./routes/novel/event/deletEvent"; -import route36 from "./routes/novel/event/generateEvents"; -import route37 from "./routes/novel/event/getEvent"; -import route38 from "./routes/novel/getNovel"; -import route39 from "./routes/novel/getNovelData"; -import route40 from "./routes/novel/getNovelEventState"; -import route41 from "./routes/novel/getNovelIndex"; -import route42 from "./routes/novel/updateNovel"; -import route43 from "./routes/other/deleteAllData"; -import route44 from "./routes/other/getVersion"; -import route45 from "./routes/production/assets/batchGenerateAssetsImage"; -import route46 from "./routes/production/assets/deleteAssetsDireve"; -import route47 from "./routes/production/assets/getAssetsData"; -import route48 from "./routes/production/assets/pollingImage"; -import route49 from "./routes/production/assets/updateAssetsUrl"; -import route50 from "./routes/production/editImage/generateFlowImage"; -import route51 from "./routes/production/editImage/getImageDefaultModle"; -import route52 from "./routes/production/editImage/getImageFlow"; -import route53 from "./routes/production/editImage/saveImageFlow"; -import route54 from "./routes/production/editImage/updateImageFlow"; -import route55 from "./routes/production/exportImage"; -import route56 from "./routes/production/getFlowData"; -import route57 from "./routes/production/getProductionData"; -import route58 from "./routes/production/getStoryboardData"; -import route59 from "./routes/production/saveFlowData"; -import route60 from "./routes/production/storyboard/addStoryboard"; -import route61 from "./routes/production/storyboard/batchAddStoryboardInfo"; -import route62 from "./routes/production/storyboard/batchGenerateImage"; -import route63 from "./routes/production/storyboard/downPreviewImage"; -import route64 from "./routes/production/storyboard/editStoryboardInfo"; -import route65 from "./routes/production/storyboard/getStoryboardData"; -import route66 from "./routes/production/storyboard/pollingImage"; -import route67 from "./routes/production/storyboard/previewImage"; -import route68 from "./routes/production/storyboard/removeFrame"; -import route69 from "./routes/production/storyboard/updateStoryboardUrl"; -import route70 from "./routes/production/workbench/addTrack"; -import route71 from "./routes/production/workbench/deleteTrack"; -import route72 from "./routes/production/workbench/delVideo"; -import route73 from "./routes/production/workbench/generateVideo"; -import route74 from "./routes/production/workbench/generateVideoPrompt"; -import route75 from "./routes/production/workbench/getGenerateData"; -import route76 from "./routes/production/workbench/getVideoList"; -import route77 from "./routes/production/workbench/getVideoModelDetail"; -import route78 from "./routes/production/workbench/selectVideo"; -import route79 from "./routes/project/addDirectorManual"; -import route80 from "./routes/project/addProject"; -import route81 from "./routes/project/addVisualManual"; -import route82 from "./routes/project/deleteDirectorManual"; -import route83 from "./routes/project/deleteVisualManual"; -import route84 from "./routes/project/delProject"; -import route85 from "./routes/project/editDirectorlManual"; -import route86 from "./routes/project/editProject"; -import route87 from "./routes/project/editVisualManual"; -import route88 from "./routes/project/getProject"; -import route89 from "./routes/project/getVisualManual"; -import route90 from "./routes/project/queryDirectorManual"; -import route91 from "./routes/project/visualManual"; -import route92 from "./routes/script/addScript"; -import route93 from "./routes/script/delScript"; -import route94 from "./routes/script/exportScript"; -import route95 from "./routes/script/extractAssets"; -import route96 from "./routes/script/getScrptApi"; -import route97 from "./routes/script/pollScriptAssets"; -import route98 from "./routes/script/updateScript"; -import route99 from "./routes/scriptAgent/getPlanData"; -import route100 from "./routes/scriptAgent/setPlanData"; -import route101 from "./routes/scriptAgent/updateData"; -import route102 from "./routes/setting/about/checkUpdate"; -import route103 from "./routes/setting/about/downloadApp"; -import route104 from "./routes/setting/agentDeploy/agentSetKey"; -import route105 from "./routes/setting/agentDeploy/deployAgentModel"; -import route106 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route107 from "./routes/setting/dbConfig/clearData"; -import route108 from "./routes/setting/dev/getSwitchAiDevTool"; -import route109 from "./routes/setting/dev/updateSwitchAiDevTool"; -import route110 from "./routes/setting/fileManagement/openFolder"; -import route111 from "./routes/setting/getTextModel"; -import route112 from "./routes/setting/loginConfig/getUser"; -import route113 from "./routes/setting/loginConfig/updateUserPwd"; -import route114 from "./routes/setting/memoryConfig/delAllMemory"; -import route115 from "./routes/setting/memoryConfig/getMemory"; -import route116 from "./routes/setting/memoryConfig/sureMemory"; -import route117 from "./routes/setting/promptManage/getPrompt"; -import route118 from "./routes/setting/promptManage/updatePrompt"; -import route119 from "./routes/setting/skillManagement/getSkillContent"; -import route120 from "./routes/setting/skillManagement/getSkillList"; -import route121 from "./routes/setting/skillManagement/saveSkillContent"; -import route122 from "./routes/setting/vendorConfig/addVendor"; -import route123 from "./routes/setting/vendorConfig/deleteVendor"; -import route124 from "./routes/setting/vendorConfig/enableVendor"; -import route125 from "./routes/setting/vendorConfig/getCodeByLink"; -import route126 from "./routes/setting/vendorConfig/getVendorList"; -import route127 from "./routes/setting/vendorConfig/modelTest"; -import route128 from "./routes/setting/vendorConfig/updateCode"; -import route129 from "./routes/setting/vendorConfig/updateVendor"; -import route130 from "./routes/task/getProject"; -import route131 from "./routes/task/getTaskApi"; -import route132 from "./routes/task/getTaskCategories"; -import route133 from "./routes/task/taskDetails"; -import route134 from "./routes/test/test"; +import route11 from "./routes/assets/delImage"; +import route12 from "./routes/assets/getAssetsApi"; +import route13 from "./routes/assets/getImage"; +import route14 from "./routes/assets/getMaterialData"; +import route15 from "./routes/assets/pollingImageAssets"; +import route16 from "./routes/assets/pollingPromptAssets"; +import route17 from "./routes/assets/saveAssets"; +import route18 from "./routes/assets/updateAssets"; +import route19 from "./routes/assets/uploadClip"; +import route20 from "./routes/assetsGenerate/batchGenerateImageAssets"; +import route21 from "./routes/assetsGenerate/batchPolishAssetsPrompt"; +import route22 from "./routes/assetsGenerate/generateAssets"; +import route23 from "./routes/assetsGenerate/polishAssetsPrompt"; +import route24 from "./routes/cornerScape/getAllAssets"; +import route25 from "./routes/general/generalStatistics"; +import route26 from "./routes/general/getSingleProject"; +import route27 from "./routes/general/updateProject"; +import route28 from "./routes/login/login"; +import route29 from "./routes/migrate/migrateData"; +import route30 from "./routes/modelSelect/getModelDetail"; +import route31 from "./routes/modelSelect/getModelList"; +import route32 from "./routes/novel/addNovel"; +import route33 from "./routes/novel/batchDeleteNovel"; +import route34 from "./routes/novel/delNovel"; +import route35 from "./routes/novel/event/batchDeleteEvent"; +import route36 from "./routes/novel/event/deletEvent"; +import route37 from "./routes/novel/event/generateEvents"; +import route38 from "./routes/novel/event/getEvent"; +import route39 from "./routes/novel/getNovel"; +import route40 from "./routes/novel/getNovelData"; +import route41 from "./routes/novel/getNovelEventState"; +import route42 from "./routes/novel/getNovelIndex"; +import route43 from "./routes/novel/updateNovel"; +import route44 from "./routes/other/deleteAllData"; +import route45 from "./routes/other/getVersion"; +import route46 from "./routes/production/assets/batchGenerateAssetsImage"; +import route47 from "./routes/production/assets/deleteAssetsDireve"; +import route48 from "./routes/production/assets/getAssetsData"; +import route49 from "./routes/production/assets/pollingImage"; +import route50 from "./routes/production/assets/updateAssetsUrl"; +import route51 from "./routes/production/editImage/generateFlowImage"; +import route52 from "./routes/production/editImage/getImageDefaultModle"; +import route53 from "./routes/production/editImage/getImageFlow"; +import route54 from "./routes/production/editImage/saveImageFlow"; +import route55 from "./routes/production/editImage/updateImageFlow"; +import route56 from "./routes/production/exportImage"; +import route57 from "./routes/production/getFlowData"; +import route58 from "./routes/production/getProductionData"; +import route59 from "./routes/production/getStoryboardData"; +import route60 from "./routes/production/saveFlowData"; +import route61 from "./routes/production/storyboard/addStoryboard"; +import route62 from "./routes/production/storyboard/batchAddStoryboardInfo"; +import route63 from "./routes/production/storyboard/batchGenerateImage"; +import route64 from "./routes/production/storyboard/downPreviewImage"; +import route65 from "./routes/production/storyboard/editStoryboardInfo"; +import route66 from "./routes/production/storyboard/getStoryboardData"; +import route67 from "./routes/production/storyboard/pollingImage"; +import route68 from "./routes/production/storyboard/previewImage"; +import route69 from "./routes/production/storyboard/removeFrame"; +import route70 from "./routes/production/storyboard/updateStoryboardUrl"; +import route71 from "./routes/production/workbench/addTrack"; +import route72 from "./routes/production/workbench/deleteTrack"; +import route73 from "./routes/production/workbench/delVideo"; +import route74 from "./routes/production/workbench/generateVideo"; +import route75 from "./routes/production/workbench/generateVideoPrompt"; +import route76 from "./routes/production/workbench/getGenerateData"; +import route77 from "./routes/production/workbench/getVideoList"; +import route78 from "./routes/production/workbench/getVideoModelDetail"; +import route79 from "./routes/production/workbench/selectVideo"; +import route80 from "./routes/project/addDirectorManual"; +import route81 from "./routes/project/addProject"; +import route82 from "./routes/project/addVisualManual"; +import route83 from "./routes/project/deleteDirectorManual"; +import route84 from "./routes/project/deleteVisualManual"; +import route85 from "./routes/project/delProject"; +import route86 from "./routes/project/editDirectorlManual"; +import route87 from "./routes/project/editProject"; +import route88 from "./routes/project/editVisualManual"; +import route89 from "./routes/project/getProject"; +import route90 from "./routes/project/getVisualManual"; +import route91 from "./routes/project/queryDirectorManual"; +import route92 from "./routes/project/visualManual"; +import route93 from "./routes/script/addScript"; +import route94 from "./routes/script/delScript"; +import route95 from "./routes/script/exportScript"; +import route96 from "./routes/script/extractAssets"; +import route97 from "./routes/script/getScrptApi"; +import route98 from "./routes/script/pollScriptAssets"; +import route99 from "./routes/script/updateScript"; +import route100 from "./routes/scriptAgent/getPlanData"; +import route101 from "./routes/scriptAgent/setPlanData"; +import route102 from "./routes/scriptAgent/updateData"; +import route103 from "./routes/setting/about/checkUpdate"; +import route104 from "./routes/setting/about/downloadApp"; +import route105 from "./routes/setting/agentDeploy/agentSetKey"; +import route106 from "./routes/setting/agentDeploy/deployAgentModel"; +import route107 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route108 from "./routes/setting/dbConfig/clearData"; +import route109 from "./routes/setting/dev/getSwitchAiDevTool"; +import route110 from "./routes/setting/dev/updateSwitchAiDevTool"; +import route111 from "./routes/setting/fileManagement/openFolder"; +import route112 from "./routes/setting/getTextModel"; +import route113 from "./routes/setting/loginConfig/getUser"; +import route114 from "./routes/setting/loginConfig/updateUserPwd"; +import route115 from "./routes/setting/memoryConfig/delAllMemory"; +import route116 from "./routes/setting/memoryConfig/getMemory"; +import route117 from "./routes/setting/memoryConfig/sureMemory"; +import route118 from "./routes/setting/promptManage/getPrompt"; +import route119 from "./routes/setting/promptManage/updatePrompt"; +import route120 from "./routes/setting/skillManagement/getSkillContent"; +import route121 from "./routes/setting/skillManagement/getSkillList"; +import route122 from "./routes/setting/skillManagement/saveSkillContent"; +import route123 from "./routes/setting/vendorConfig/addVendor"; +import route124 from "./routes/setting/vendorConfig/deleteVendor"; +import route125 from "./routes/setting/vendorConfig/enableVendor"; +import route126 from "./routes/setting/vendorConfig/getCodeByLink"; +import route127 from "./routes/setting/vendorConfig/getVendorList"; +import route128 from "./routes/setting/vendorConfig/modelTest"; +import route129 from "./routes/setting/vendorConfig/updateCode"; +import route130 from "./routes/setting/vendorConfig/updateVendor"; +import route131 from "./routes/task/getProject"; +import route132 from "./routes/task/getTaskApi"; +import route133 from "./routes/task/getTaskCategories"; +import route134 from "./routes/task/taskDetails"; +import route135 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -147,128 +148,129 @@ export default async (app: Express) => { app.use("/api/assets/batchDelete", route8); app.use("/api/assets/batchGenerationData", route9); app.use("/api/assets/delAssets", route10); - app.use("/api/assets/getAssetsApi", route11); - app.use("/api/assets/getImage", route12); - app.use("/api/assets/getMaterialData", route13); - app.use("/api/assets/pollingImageAssets", route14); - app.use("/api/assets/pollingPromptAssets", route15); - app.use("/api/assets/saveAssets", route16); - app.use("/api/assets/updateAssets", route17); - app.use("/api/assets/uploadClip", route18); - app.use("/api/assetsGenerate/batchGenerateImageAssets", route19); - app.use("/api/assetsGenerate/batchPolishAssetsPrompt", route20); - app.use("/api/assetsGenerate/generateAssets", route21); - app.use("/api/assetsGenerate/polishAssetsPrompt", route22); - app.use("/api/cornerScape/getAllAssets", route23); - app.use("/api/general/generalStatistics", route24); - app.use("/api/general/getSingleProject", route25); - app.use("/api/general/updateProject", route26); - app.use("/api/login/login", route27); - app.use("/api/migrate/migrateData", route28); - app.use("/api/modelSelect/getModelDetail", route29); - app.use("/api/modelSelect/getModelList", route30); - app.use("/api/novel/addNovel", route31); - app.use("/api/novel/batchDeleteNovel", route32); - app.use("/api/novel/delNovel", route33); - app.use("/api/novel/event/batchDeleteEvent", route34); - app.use("/api/novel/event/deletEvent", route35); - app.use("/api/novel/event/generateEvents", route36); - app.use("/api/novel/event/getEvent", route37); - app.use("/api/novel/getNovel", route38); - app.use("/api/novel/getNovelData", route39); - app.use("/api/novel/getNovelEventState", route40); - app.use("/api/novel/getNovelIndex", route41); - app.use("/api/novel/updateNovel", route42); - app.use("/api/other/deleteAllData", route43); - app.use("/api/other/getVersion", route44); - app.use("/api/production/assets/batchGenerateAssetsImage", route45); - app.use("/api/production/assets/deleteAssetsDireve", route46); - app.use("/api/production/assets/getAssetsData", route47); - app.use("/api/production/assets/pollingImage", route48); - app.use("/api/production/assets/updateAssetsUrl", route49); - app.use("/api/production/editImage/generateFlowImage", route50); - app.use("/api/production/editImage/getImageDefaultModle", route51); - app.use("/api/production/editImage/getImageFlow", route52); - app.use("/api/production/editImage/saveImageFlow", route53); - app.use("/api/production/editImage/updateImageFlow", route54); - app.use("/api/production/exportImage", route55); - app.use("/api/production/getFlowData", route56); - app.use("/api/production/getProductionData", route57); - app.use("/api/production/getStoryboardData", route58); - app.use("/api/production/saveFlowData", route59); - app.use("/api/production/storyboard/addStoryboard", route60); - app.use("/api/production/storyboard/batchAddStoryboardInfo", route61); - app.use("/api/production/storyboard/batchGenerateImage", route62); - app.use("/api/production/storyboard/downPreviewImage", route63); - app.use("/api/production/storyboard/editStoryboardInfo", route64); - app.use("/api/production/storyboard/getStoryboardData", route65); - app.use("/api/production/storyboard/pollingImage", route66); - app.use("/api/production/storyboard/previewImage", route67); - app.use("/api/production/storyboard/removeFrame", route68); - app.use("/api/production/storyboard/updateStoryboardUrl", route69); - app.use("/api/production/workbench/addTrack", route70); - app.use("/api/production/workbench/deleteTrack", route71); - app.use("/api/production/workbench/delVideo", route72); - app.use("/api/production/workbench/generateVideo", route73); - app.use("/api/production/workbench/generateVideoPrompt", route74); - app.use("/api/production/workbench/getGenerateData", route75); - app.use("/api/production/workbench/getVideoList", route76); - app.use("/api/production/workbench/getVideoModelDetail", route77); - app.use("/api/production/workbench/selectVideo", route78); - app.use("/api/project/addDirectorManual", route79); - app.use("/api/project/addProject", route80); - app.use("/api/project/addVisualManual", route81); - app.use("/api/project/deleteDirectorManual", route82); - app.use("/api/project/deleteVisualManual", route83); - app.use("/api/project/delProject", route84); - app.use("/api/project/editDirectorlManual", route85); - app.use("/api/project/editProject", route86); - app.use("/api/project/editVisualManual", route87); - app.use("/api/project/getProject", route88); - app.use("/api/project/getVisualManual", route89); - app.use("/api/project/queryDirectorManual", route90); - app.use("/api/project/visualManual", route91); - app.use("/api/script/addScript", route92); - app.use("/api/script/delScript", route93); - app.use("/api/script/exportScript", route94); - app.use("/api/script/extractAssets", route95); - app.use("/api/script/getScrptApi", route96); - app.use("/api/script/pollScriptAssets", route97); - app.use("/api/script/updateScript", route98); - app.use("/api/scriptAgent/getPlanData", route99); - app.use("/api/scriptAgent/setPlanData", route100); - app.use("/api/scriptAgent/updateData", route101); - app.use("/api/setting/about/checkUpdate", route102); - app.use("/api/setting/about/downloadApp", route103); - app.use("/api/setting/agentDeploy/agentSetKey", route104); - app.use("/api/setting/agentDeploy/deployAgentModel", route105); - app.use("/api/setting/agentDeploy/getAgentDeploy", route106); - app.use("/api/setting/dbConfig/clearData", route107); - app.use("/api/setting/dev/getSwitchAiDevTool", route108); - app.use("/api/setting/dev/updateSwitchAiDevTool", route109); - app.use("/api/setting/fileManagement/openFolder", route110); - app.use("/api/setting/getTextModel", route111); - app.use("/api/setting/loginConfig/getUser", route112); - app.use("/api/setting/loginConfig/updateUserPwd", route113); - app.use("/api/setting/memoryConfig/delAllMemory", route114); - app.use("/api/setting/memoryConfig/getMemory", route115); - app.use("/api/setting/memoryConfig/sureMemory", route116); - app.use("/api/setting/promptManage/getPrompt", route117); - app.use("/api/setting/promptManage/updatePrompt", route118); - app.use("/api/setting/skillManagement/getSkillContent", route119); - app.use("/api/setting/skillManagement/getSkillList", route120); - app.use("/api/setting/skillManagement/saveSkillContent", route121); - app.use("/api/setting/vendorConfig/addVendor", route122); - app.use("/api/setting/vendorConfig/deleteVendor", route123); - app.use("/api/setting/vendorConfig/enableVendor", route124); - app.use("/api/setting/vendorConfig/getCodeByLink", route125); - app.use("/api/setting/vendorConfig/getVendorList", route126); - app.use("/api/setting/vendorConfig/modelTest", route127); - app.use("/api/setting/vendorConfig/updateCode", route128); - app.use("/api/setting/vendorConfig/updateVendor", route129); - app.use("/api/task/getProject", route130); - app.use("/api/task/getTaskApi", route131); - app.use("/api/task/getTaskCategories", route132); - app.use("/api/task/taskDetails", route133); - app.use("/api/test/test", route134); + app.use("/api/assets/delImage", route11); + app.use("/api/assets/getAssetsApi", route12); + app.use("/api/assets/getImage", route13); + app.use("/api/assets/getMaterialData", route14); + app.use("/api/assets/pollingImageAssets", route15); + app.use("/api/assets/pollingPromptAssets", route16); + app.use("/api/assets/saveAssets", route17); + app.use("/api/assets/updateAssets", route18); + app.use("/api/assets/uploadClip", route19); + app.use("/api/assetsGenerate/batchGenerateImageAssets", route20); + app.use("/api/assetsGenerate/batchPolishAssetsPrompt", route21); + app.use("/api/assetsGenerate/generateAssets", route22); + app.use("/api/assetsGenerate/polishAssetsPrompt", route23); + app.use("/api/cornerScape/getAllAssets", route24); + app.use("/api/general/generalStatistics", route25); + app.use("/api/general/getSingleProject", route26); + app.use("/api/general/updateProject", route27); + app.use("/api/login/login", route28); + app.use("/api/migrate/migrateData", route29); + app.use("/api/modelSelect/getModelDetail", route30); + app.use("/api/modelSelect/getModelList", route31); + app.use("/api/novel/addNovel", route32); + app.use("/api/novel/batchDeleteNovel", route33); + app.use("/api/novel/delNovel", route34); + app.use("/api/novel/event/batchDeleteEvent", route35); + app.use("/api/novel/event/deletEvent", route36); + app.use("/api/novel/event/generateEvents", route37); + app.use("/api/novel/event/getEvent", route38); + app.use("/api/novel/getNovel", route39); + app.use("/api/novel/getNovelData", route40); + app.use("/api/novel/getNovelEventState", route41); + app.use("/api/novel/getNovelIndex", route42); + app.use("/api/novel/updateNovel", route43); + app.use("/api/other/deleteAllData", route44); + app.use("/api/other/getVersion", route45); + app.use("/api/production/assets/batchGenerateAssetsImage", route46); + app.use("/api/production/assets/deleteAssetsDireve", route47); + app.use("/api/production/assets/getAssetsData", route48); + app.use("/api/production/assets/pollingImage", route49); + app.use("/api/production/assets/updateAssetsUrl", route50); + app.use("/api/production/editImage/generateFlowImage", route51); + app.use("/api/production/editImage/getImageDefaultModle", route52); + app.use("/api/production/editImage/getImageFlow", route53); + app.use("/api/production/editImage/saveImageFlow", route54); + app.use("/api/production/editImage/updateImageFlow", route55); + app.use("/api/production/exportImage", route56); + app.use("/api/production/getFlowData", route57); + app.use("/api/production/getProductionData", route58); + app.use("/api/production/getStoryboardData", route59); + app.use("/api/production/saveFlowData", route60); + app.use("/api/production/storyboard/addStoryboard", route61); + app.use("/api/production/storyboard/batchAddStoryboardInfo", route62); + app.use("/api/production/storyboard/batchGenerateImage", route63); + app.use("/api/production/storyboard/downPreviewImage", route64); + app.use("/api/production/storyboard/editStoryboardInfo", route65); + app.use("/api/production/storyboard/getStoryboardData", route66); + app.use("/api/production/storyboard/pollingImage", route67); + app.use("/api/production/storyboard/previewImage", route68); + app.use("/api/production/storyboard/removeFrame", route69); + app.use("/api/production/storyboard/updateStoryboardUrl", route70); + app.use("/api/production/workbench/addTrack", route71); + app.use("/api/production/workbench/deleteTrack", route72); + app.use("/api/production/workbench/delVideo", route73); + app.use("/api/production/workbench/generateVideo", route74); + app.use("/api/production/workbench/generateVideoPrompt", route75); + app.use("/api/production/workbench/getGenerateData", route76); + app.use("/api/production/workbench/getVideoList", route77); + app.use("/api/production/workbench/getVideoModelDetail", route78); + app.use("/api/production/workbench/selectVideo", route79); + app.use("/api/project/addDirectorManual", route80); + app.use("/api/project/addProject", route81); + app.use("/api/project/addVisualManual", route82); + app.use("/api/project/deleteDirectorManual", route83); + app.use("/api/project/deleteVisualManual", route84); + app.use("/api/project/delProject", route85); + app.use("/api/project/editDirectorlManual", route86); + app.use("/api/project/editProject", route87); + app.use("/api/project/editVisualManual", route88); + app.use("/api/project/getProject", route89); + app.use("/api/project/getVisualManual", route90); + app.use("/api/project/queryDirectorManual", route91); + app.use("/api/project/visualManual", route92); + app.use("/api/script/addScript", route93); + app.use("/api/script/delScript", route94); + app.use("/api/script/exportScript", route95); + app.use("/api/script/extractAssets", route96); + app.use("/api/script/getScrptApi", route97); + app.use("/api/script/pollScriptAssets", route98); + app.use("/api/script/updateScript", route99); + app.use("/api/scriptAgent/getPlanData", route100); + app.use("/api/scriptAgent/setPlanData", route101); + app.use("/api/scriptAgent/updateData", route102); + app.use("/api/setting/about/checkUpdate", route103); + app.use("/api/setting/about/downloadApp", route104); + app.use("/api/setting/agentDeploy/agentSetKey", route105); + app.use("/api/setting/agentDeploy/deployAgentModel", route106); + app.use("/api/setting/agentDeploy/getAgentDeploy", route107); + app.use("/api/setting/dbConfig/clearData", route108); + app.use("/api/setting/dev/getSwitchAiDevTool", route109); + app.use("/api/setting/dev/updateSwitchAiDevTool", route110); + app.use("/api/setting/fileManagement/openFolder", route111); + app.use("/api/setting/getTextModel", route112); + app.use("/api/setting/loginConfig/getUser", route113); + app.use("/api/setting/loginConfig/updateUserPwd", route114); + app.use("/api/setting/memoryConfig/delAllMemory", route115); + app.use("/api/setting/memoryConfig/getMemory", route116); + app.use("/api/setting/memoryConfig/sureMemory", route117); + app.use("/api/setting/promptManage/getPrompt", route118); + app.use("/api/setting/promptManage/updatePrompt", route119); + app.use("/api/setting/skillManagement/getSkillContent", route120); + app.use("/api/setting/skillManagement/getSkillList", route121); + app.use("/api/setting/skillManagement/saveSkillContent", route122); + app.use("/api/setting/vendorConfig/addVendor", route123); + app.use("/api/setting/vendorConfig/deleteVendor", route124); + app.use("/api/setting/vendorConfig/enableVendor", route125); + app.use("/api/setting/vendorConfig/getCodeByLink", route126); + app.use("/api/setting/vendorConfig/getVendorList", route127); + app.use("/api/setting/vendorConfig/modelTest", route128); + app.use("/api/setting/vendorConfig/updateCode", route129); + app.use("/api/setting/vendorConfig/updateVendor", route130); + app.use("/api/task/getProject", route131); + app.use("/api/task/getTaskApi", route132); + app.use("/api/task/getTaskCategories", route133); + app.use("/api/task/taskDetails", route134); + app.use("/api/test/test", route135); } diff --git a/src/routes/assets/delAssets.ts b/src/routes/assets/delAssets.ts index d5195df..cbca48f 100644 --- a/src/routes/assets/delAssets.ts +++ b/src/routes/assets/delAssets.ts @@ -13,7 +13,19 @@ export default router.post( async (req, res) => { const { id } = req.body; const assetsData = await u.db("o_image").where("assetsId", id); - await Promise.all(assetsData.map((i) => i.filePath && u.oss.deleteFile(i.filePath))); + await Promise.all( + assetsData.map((i) => + i.filePath + ? u.oss.deleteFile(i.filePath).catch((e) => { + if (e?.code !== "ENOENT") throw e; + }) + : Promise.resolve(), + ), + ); + const imageIds = assetsData.map((i) => i.id).filter(Boolean); + if (imageIds.length > 0) { + await u.db("o_assets").whereIn("imageId", imageIds).update({ imageId: null }); + } await u.db("o_image").where({ assetsId: id }).delete(); await u.db("o_assets").where({ id }).delete(); res.status(200).send(success({ message: "删除资产成功" })); diff --git a/src/routes/assets/delImage.ts b/src/routes/assets/delImage.ts new file mode 100644 index 0000000..ec91be2 --- /dev/null +++ b/src/routes/assets/delImage.ts @@ -0,0 +1,23 @@ +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("o_assets").where({ imageId: id }).update({ + imageId: null, + }); + await u.db("o_image").where({ id: id }).delete(); + const assetsData = await u.db("o_image").where("id", id); + await Promise.all(assetsData.map((i) => i.filePath && u.oss.deleteFile(i.filePath))); + res.status(200).send(success({ message: "资产图片删除成功" })); + }, +); diff --git a/src/routes/production/assets/pollingImage.ts b/src/routes/production/assets/pollingImage.ts index 041a6dc..c1fb8c9 100644 --- a/src/routes/production/assets/pollingImage.ts +++ b/src/routes/production/assets/pollingImage.ts @@ -17,7 +17,7 @@ export default router.post( .leftJoin("o_image", "o_assets.imageId", "o_image.id") .whereIn("o_assets.id", ids) .whereNot("o_image.state", "生成中") - .select("o_image.state", "o_assets.id", "o_image.filePath", "o_image.errorReason"); + .select("o_image.state", "o_assets.id", "o_image.filePath", "o_image.errorReason","o_assets.prompt"); const result = await Promise.all( data.map(async (item: any) => ({ ...item, diff --git a/src/routes/production/storyboard/batchGenerateImage.ts b/src/routes/production/storyboard/batchGenerateImage.ts index 8215a96..a052d2e 100644 --- a/src/routes/production/storyboard/batchGenerateImage.ts +++ b/src/routes/production/storyboard/batchGenerateImage.ts @@ -111,6 +111,7 @@ export default router.post( .db("o_storyboard") .where("id", item.id) .update({ + filePath: "", reason: u.error(e).message, state: "生成失败", }); diff --git a/src/routes/production/workbench/generateVideoPrompt.ts b/src/routes/production/workbench/generateVideoPrompt.ts index 74a1deb..a0bf5ca 100644 --- a/src/routes/production/workbench/generateVideoPrompt.ts +++ b/src/routes/production/workbench/generateVideoPrompt.ts @@ -92,22 +92,26 @@ export default router.post( )}, `; - const { text } = await u.Ai.Text("universalAi").invoke({ - system: videoPrompt?.data!, - messages: [ - { - role: "assistant", - content: `${visualManual}`, - }, - { - role: "user", - content: content, - }, - ], - }); - await u.db("o_videoTrack").where({ id: trackId }).update({ - prompt: text, - }); - res.status(200).send(success(text)); + try { + const { text } = await u.Ai.Text("universalAi").invoke({ + system: videoPrompt?.data!, + messages: [ + { + role: "assistant", + content: `${visualManual}`, + }, + { + role: "user", + content: content, + }, + ], + }); + await u.db("o_videoTrack").where({ id: trackId }).update({ + prompt: text, + }); + res.status(200).send(success(text)); + } catch (error) { + res.status(500).send(error); + } }, ); diff --git a/src/routes/production/workbench/getGenerateData.ts b/src/routes/production/workbench/getGenerateData.ts index 901342f..ad06526 100644 --- a/src/routes/production/workbench/getGenerateData.ts +++ b/src/routes/production/workbench/getGenerateData.ts @@ -38,23 +38,18 @@ export default router.post( async (req, res) => { const { projectId, scriptId } = req.body; const storyboardList = await u.db("o_storyboard").where({ scriptId, projectId }).orderBy("index", "asc"); + const trackData = await u.db("o_videoTrack").where({ projectId, scriptId }); const videoList = await u.db("o_video").whereIn( "videoTrackId", - storyboardList.map((s) => s.trackId), + trackData.map((t) => t.id), ); - const trackData = await u.db("o_videoTrack").whereIn( - //@ts-ignore - "id", - storyboardList.map((s) => s.trackId), - ); - const trackList: TrackItem[] = []; - const trackIdMap = [...new Set(storyboardList.map((s) => s.trackId!))]; + const trackIdMap = [...new Set(trackData.map((t) => t.id!))]; for (const trackId of trackIdMap) { const item = trackData.find((t) => t.id === trackId); trackList.push({ id: trackId, - duration: item?.duration ?? 0, + duration: item?.duration ?? 0, prompt: item?.prompt || "", state: (item?.state as "未生成" | "生成中" | "已完成" | "生成失败") ?? "未生成", reason: item?.reason ?? "", diff --git a/src/routes/script/extractAssets.ts b/src/routes/script/extractAssets.ts index 1c9f026..50d7cbc 100644 --- a/src/routes/script/extractAssets.ts +++ b/src/routes/script/extractAssets.ts @@ -41,12 +41,16 @@ type GroupResult = { } | null; /** 将 scriptIds 数组按 groupSize 分组 */ -function chunkArray(arr: T[], groupSize: number): T[][] { - const chunks: T[][] = []; - for (let i = 0; i < arr.length; i += groupSize) { - chunks.push(arr.slice(i, i + groupSize)); +function chunkArray(arr: number[], groupSize: number): number[][][] { + const chunks: number[][] = []; + for (let i = 0; i < arr.length; i += 5) { + chunks.push(arr.slice(i, i + 5)); } - return chunks; + const groupChunks = []; + for (let i = 0; i < chunks.length; i += groupSize) { + groupChunks.push(chunks.slice(i, i + groupSize)); + } + return groupChunks; } export default router.post( @@ -60,7 +64,9 @@ export default router.post( const { scriptIds, projectId, groupSize = 5 } = req.body; if (!scriptIds.length) return res.status(400).send(error("请先选择剧本")); + console.log("%c Line:67 🍪 scriptIds", "background:#e41a6a", scriptIds); const scripts = await u.db("o_script").whereIn("id", scriptIds); + // 构建 scriptId -> script 内容的映射 const scriptMap = new Map(scripts.map((s: o_script) => [s.id, s])); @@ -73,7 +79,8 @@ export default router.post( let successCount = 0; // 将 scriptIds 按 groupSize(默认5)分组,每组一起发给 AI - const scriptGroups = chunkArray(scriptIds, groupSize); + const scriptGroups = chunkArray(scriptIds as number[], groupSize); + console.log("%c Line:83 🍿 scriptGroups", "background:#f5ce50", scriptGroups); /** 一组剧本提取完成后统一入库并建立关联 */ async function persistGroupResult(result: GroupResult) { @@ -139,113 +146,107 @@ export default router.post( }); } res.send(success("开始提取资产")); - // 逐组处理(每组最多 groupSize 集剧本一起发给 AI) - for (const group of scriptGroups) { - // 过滤有效剧本 - const validScripts: { id: number; script: o_script }[] = []; - for (const scriptId of group as number[]) { - const script = scriptMap.get(scriptId); - if (!script) { - errors.push({ scriptId, error: "未找到对应剧本" }); - await u.db("o_script").where("id", scriptId).update({ extractState: -1, errorReason: "未找到对应剧本" }); - } else { - // 查看状态是否为等待提取,仅对等待提取进行生成 - const item = await u.db("o_script").where("id", scriptId).select("extractState").first(); - if (item?.extractState == 2) { - validScripts.push({ id: scriptId, script }); + + function processGroup(group: number[][][]) { + group.map(async (itemIds) => { + const validScripts: { id: number; script: o_script }[] = []; + for (const scriptIds of itemIds as number[][]) { + for (const scriptId of scriptIds) { + const script = scriptMap.get(scriptId); + if (!script) { + errors.push({ scriptId, error: "未找到对应剧本" }); + await u.db("o_script").where("id", scriptId).update({ extractState: -1, errorReason: "未找到对应剧本" }); + } else { + // 查看状态是否为等待提取,仅对等待提取进行生成 + const item = await u.db("o_script").where("id", scriptId).select("extractState").first(); + if (item?.extractState == 2) { + validScripts.push({ id: scriptId, script }); + } + } } } - } - if (!validScripts.length) continue; - const validScriptIds = validScripts.map((v) => v.id); - // 修改状态为正在提取中 - await u.db("o_script").whereIn("id", validScriptIds).update({ - extractState: 0, // 正在提取 - }); - // 查询当前项目已有的资产列表,提供给 AI 参考 - const existingAssets = await u.db("o_assets").where("projectId", projectId).select("name", "type"); - const existingAssetsList = existingAssets.map((a) => `${a.name}(${a.type})`).join("、"); + console.log("%c Line:161 🥕 validScripts", "background:#42b983", validScripts); - // 拼接多集剧本内容,每集用分隔标记 - const scriptsContent = validScripts - .map(({ id, script }) => `===== 【剧本ID: ${id}】${script.name || ""} =====\n${script.content}`) - .join("\n\n"); - - // 用闭包收集 AI 返回的资产 - let collectedNew: NewAsset[] = []; - let collectedExisting: ExistingAssetRef[] = []; - - const resultTool = tool({ - description: "返回结果时必须调用这个工具", - inputSchema: z.object({ - newAssets: z - .array(NewAssetSchema) - .describe("新发现的资产列表(不在已有资产列表中的),需要完整的 prompt、name、desc、type 和使用该资产的 scriptIds"), - existingAssetRefs: z - .array(ExistingAssetRefSchema) - .describe("已有资产的引用列表(在已有资产列表中已存在的),只需给出资产名称和使用该资产的 scriptIds"), - }), - execute: async ({ newAssets, existingAssetRefs }) => { - console.log("[tools] extractAssets result", { newAssets, existingAssetRefs }); - if (newAssets?.length) collectedNew = newAssets; - if (existingAssetRefs?.length) collectedExisting = existingAssetRefs; - return "无需回复用户任何内容"; - }, - }); - - try { - const data = await u.db("o_prompt").where("type", "scriptAssetExtraction").first("data"); - const existingHint = existingAssetsList - ? `\n\n【已有资产列表】:${existingAssetsList}\n对于已有资产,如果在剧本中出现,只需在 existingAssetRefs 中给出资产名称和对应的 scriptIds 数组即可,无需重复生成 desc/type。对于新发现的资产(不在已有列表中),请在 newAssets 中给出完整信息。` - : ""; - - const output = await u.Ai.Text("universalAi").invoke({ - messages: [ - { - role: "system", - content: - data?.data + - "\n\n提取剧本中涉及的资产(角色、场景、道具),参考技能 script_assets_extract 规范,结果必须通过 resultTool 工具返回。" + - "\n\n注意:本次会同时提供多集剧本,每集剧本以 ===== 【剧本ID: xxx】 ===== 分隔。你需要分析每集剧本使用了哪些资产,并在输出中用 scriptIds 数组标明每个资产在哪些剧本中出现。", - }, - { - role: "user", - content: `当前已有资产列表:${existingHint}\n\n请根据以下${validScripts.length}集剧本提取对应的剧本资产(角色、场景、道具):\n\n${scriptsContent}`, - }, - ], - tools: { resultTool }, + if (!validScripts.length) return; + const validScriptIds = validScripts.map((v) => v.id); + // 修改状态为正在提取中 + await u.db("o_script").whereIn("id", validScriptIds).update({ + extractState: 0, // 正在提取 }); - console.log("%c Line:extractAssets 🍧 output", "background:#f5ce50", output.text); - } catch (e: any) { - const msg = e?.message || String(e); - const scriptNames = validScripts.map((v) => v.script.name).join(", "); - console.error(`[extractAssets] group=[${validScriptIds.join(",")}] 提取失败:`, msg); - for (const { id, script } of validScripts) { - errors.push({ scriptId: id, error: (script.name || "") + ":" + u.error(e).message }); - await u - .db("o_script") - .where("id", id) - .update({ extractState: -1, errorReason: u.error(e).message }); + // 查询当前项目已有的资产列表,提供给 AI 参考 + const existingAssets = await u.db("o_assets").where("projectId", projectId).select("name", "type"); + const existingAssetsList = existingAssets.map((a) => `${a.name}(${a.type})`).join("、"); + + // 拼接多集剧本内容,每集用分隔标记 + const scriptsContent = validScripts + .map(({ id, script }) => `===== 【剧本ID: ${id}】${script.name || ""} =====\n${script.content}`) + .join("\n\n"); + + let collectedNew: NewAsset[] = []; + let collectedExisting: ExistingAssetRef[] = []; + try { + const resultTool = tool({ + description: "返回结果时必须调用这个工具", + inputSchema: z.object({ + newAssets: z + .array(NewAssetSchema) + .describe("新发现的资产列表(不在已有资产列表中的),需要完整的 prompt、name、desc、type 和使用该资产的 scriptIds"), + existingAssetRefs: z + .array(ExistingAssetRefSchema) + .describe("已有资产的引用列表(在已有资产列表中已存在的),只需给出资产名称和使用该资产的 scriptIds"), + }), + execute: async ({ newAssets, existingAssetRefs }) => { + console.log("[tools] extractAssets result", { newAssets, existingAssetRefs }); + if (newAssets?.length) collectedNew = newAssets; + if (existingAssetRefs?.length) collectedExisting = existingAssetRefs; + return "无需回复用户任何内容"; + }, + }); + const data = await u.db("o_prompt").where("type", "scriptAssetExtraction").first("data"); + const existingHint = existingAssetsList + ? `\n\n【已有资产列表】:${existingAssetsList}\n对于已有资产,如果在剧本中出现,只需在 existingAssetRefs 中给出资产名称和对应的 scriptIds 数组即可,无需重复生成 desc/type。对于新发现的资产(不在已有列表中),请在 newAssets 中给出完整信息。` + : ""; + const output = await u.Ai.Text("universalAi").invoke({ + messages: [ + { + role: "system", + content: + data?.data + + "\n\n提取剧本中涉及的资产(角色、场景、道具),参考技能 script_assets_extract 规范,结果必须通过 resultTool 工具返回。" + + "\n\n注意:本次会同时提供多集剧本,每集剧本以 ===== 【剧本ID: xxx】 ===== 分隔。你需要分析每集剧本使用了哪些资产,并在输出中用 scriptIds 数组标明每个资产在哪些剧本中出现。", + }, + { + role: "user", + content: `当前已有资产列表:${existingHint}\n\n请根据以下${validScripts.length}集剧本提取对应的剧本资产(角色、场景、道具):\n\n${scriptsContent}`, + }, + ], + tools: { resultTool }, + }); + await persistGroupResult({ + batchScriptIds: validScriptIds, + newAssets: collectedNew, + existingRefs: collectedExisting, + }); + } catch (e) { + console.error(`[extractAssets] group=[${validScriptIds.join(",")}] 提取失败:`, e); + for (const { id, script } of validScripts) { + errors.push({ scriptId: id, error: (script.name || "") + ":" + u.error(e).message }); + await u + .db("o_script") + .where("id", id) + .update({ extractState: -1, errorReason: u.error(e).message }); + } + return; } - continue; - } - - if (!collectedNew.length && !collectedExisting.length) { - for (const { id } of validScripts) { - errors.push({ scriptId: id, error: "AI 未返回任何资产" }); - await u.db("o_script").where("id", id).update({ extractState: -1, errorReason: "AI 未返回任何资产" }); + if (!collectedNew.length && !collectedExisting.length) { + for (const { id } of validScripts) { + errors.push({ scriptId: id, error: "AI 未返回任何资产" }); + await u.db("o_script").where("id", id).update({ extractState: -1, errorReason: "AI 未返回任何资产" }); + } + return; } - continue; - } - - successCount += validScripts.length; - - // 入库 - await persistGroupResult({ - batchScriptIds: validScriptIds, - newAssets: collectedNew, - existingRefs: collectedExisting, }); } + processGroup(scriptGroups); }, ); diff --git a/src/types/database.d.ts b/src/types/database.d.ts index 1af96b9..dc02b6a 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,6 +1,22 @@ -// @db-hash 6fa5017e455bc367c9c902ba574d11b4 +// @db-hash 19c726e36479d905346c772cfa8007ba //该文件由脚本自动生成,请勿手动修改 +export interface _o_project_old_20260404 { + 'artStyle'?: string | null; + 'createTime'?: number | null; + 'directorManual'?: string | null; + 'id'?: number | null; + 'imageModel'?: string | null; + 'imageQuality'?: string | null; + 'intro'?: string | null; + 'mode'?: string | null; + 'name'?: string | null; + 'projectType'?: string | null; + 'type'?: string | null; + 'userId'?: number | null; + 'videoModel'?: string | null; + 'videoRatio'?: string | null; +} export interface memories { 'content': string; 'createTime': number; @@ -231,6 +247,7 @@ export interface o_videoTrack { } export interface DB { + "_o_project_old_20260404": _o_project_old_20260404; "memories": memories; "o_agentDeploy": o_agentDeploy; "o_agentWorkData": o_agentWorkData;