forked from bai/curriculum-project-hub
fix: move folder creation into project move flow
This commit is contained in:
+21
-10
@@ -56,7 +56,6 @@ import { createSlashCommandRegistry, parseSlashInvocation } from "./slashCommand
|
||||
import { cphHubMcpToolsForRole, roleToolsAllow } from "../agent/roleTools.js";
|
||||
import {
|
||||
bindFeishuChatToProject,
|
||||
createFolder,
|
||||
createProjectFromFeishuChat,
|
||||
ensureOrganizationProjectSettings,
|
||||
moveProjectToFolder,
|
||||
@@ -75,6 +74,7 @@ import {
|
||||
import {
|
||||
archiveCurrentRoleSession,
|
||||
browseFolderDestinations,
|
||||
createFolderAndMoveProject,
|
||||
listRoleSessionHistory,
|
||||
loadProjectConsole,
|
||||
resumeRoleSession,
|
||||
@@ -221,7 +221,6 @@ export function makeTriggerHandler(deps: TriggerDeps): TriggerHandler {
|
||||
roles: visibleRoles,
|
||||
currentSession: state.currentSession,
|
||||
canManageProject: manageDecision.allowed || isOrgAdmin,
|
||||
canCreateFolder: isOrgAdmin,
|
||||
...(title !== undefined ? { title } : {}),
|
||||
});
|
||||
}
|
||||
@@ -949,6 +948,7 @@ export function makeTriggerHandler(deps: TriggerDeps): TriggerHandler {
|
||||
organizationId: state.organizationId,
|
||||
projectId,
|
||||
projectName: state.projectName,
|
||||
canCreateFolder: isOrgAdmin,
|
||||
...page,
|
||||
}));
|
||||
return;
|
||||
@@ -968,18 +968,20 @@ export function makeTriggerHandler(deps: TriggerDeps): TriggerHandler {
|
||||
if (!isOrgAdmin) throw new Error("creating an Organization folder requires OWNER or ADMIN");
|
||||
const folderName = event.action.form_value?.["folder_name"];
|
||||
if (typeof folderName !== "string") throw new Error("create folder form is missing folder_name");
|
||||
const folder = await createFolder(deps.prisma, {
|
||||
const folder = await createFolderAndMoveProject(deps.prisma, {
|
||||
organizationId: state.organizationId,
|
||||
name: folderName.slice(0, 100),
|
||||
...(state.folderId !== null ? { parentId: state.folderId } : {}),
|
||||
});
|
||||
await writeAudit(deps.prisma, {
|
||||
projectId,
|
||||
action: "folder.created_from_feishu",
|
||||
metadata: { folderId: folder.id, parentId: state.folderId, name: folder.name },
|
||||
parentFolderId: action.folder_id ?? null,
|
||||
name: folderName.slice(0, 100),
|
||||
...(manageDecision.actorUserId !== undefined ? { actorUserId: manageDecision.actorUserId } : {}),
|
||||
});
|
||||
if (messageId === undefined) throw new Error("folder creation requires message id");
|
||||
await patchCard(rt, messageId, await projectConsoleCard(projectId, chatId, operatorOpenId, "目录已创建"));
|
||||
await patchCard(rt, messageId, await projectConsoleCard(
|
||||
projectId,
|
||||
chatId,
|
||||
operatorOpenId,
|
||||
`已新建目录“${folder.folderName}”并移动项目`,
|
||||
));
|
||||
return;
|
||||
}
|
||||
if (action.action === "rename_project") {
|
||||
@@ -1359,6 +1361,15 @@ export function makeTriggerHandler(deps: TriggerDeps): TriggerHandler {
|
||||
return;
|
||||
}
|
||||
const key = messageBatchKey(chatId, senderOpenId, runContext.roleId);
|
||||
for (const [pendingKey, pendingContext] of batchContexts) {
|
||||
if (
|
||||
pendingKey !== key &&
|
||||
pendingContext.chatId === chatId &&
|
||||
pendingContext.senderOpenId === senderOpenId
|
||||
) {
|
||||
await messageBatcher.flushNow(pendingKey);
|
||||
}
|
||||
}
|
||||
if (!batchContexts.has(key)) {
|
||||
batchContexts.set(key, runContext);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user