feat(mindspace): add per-user OA cloud drive with fds-style file manager

Expose authenticated /api/mindspace/v1/oa/drive APIs over each user's oa/ workspace and wire a MindSpace entry at /space/oa/drive.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-09-10 18:55:46 +08:00
parent d07815d317
commit 6d5eb15b1b
22 changed files with 3833 additions and 9 deletions
+16
View File
@@ -55,6 +55,8 @@ import { attachPortalMindSpacePageCoreRoutes } from './server/portal-mindspace-p
import { attachPortalMindSpacePagePublishRoutes } from './server/portal-mindspace-page-publish-routes.mjs';
import { attachPortalMindSpaceWechatRoutes } from './server/portal-mindspace-wechat-routes.mjs';
import { attachPortalMindSpaceSpaceRoutes } from './server/portal-mindspace-space-routes.mjs';
import { attachPortalMindSpaceOaDriveRoutes } from './server/portal-mindspace-oa-drive-routes.mjs';
import { createMindSpaceOaDriveService } from './mindspace-oa-drive/drive-service.mjs';
import { createMindSpaceWechatMpConfigService } from './mindspace-wechat-mp-config.mjs';
import { createMindSpaceWechatPageDraftService } from './mindspace-wechat-page-draft.mjs';
import { attachPortalTemplateCatalogRoutes } from './server/portal-template-catalog-routes.mjs';
@@ -335,6 +337,7 @@ let plazaSeo = null;
let plazaOps = null;
let plazaRedis = createNoopPlazaRedis();
let mindSpaceCleanup = null;
let mindSpaceOaDrive = null;
let mindSpaceAgentJobs = null;
let mindSpaceAgentRunner = null;
let rechargeService = null;
@@ -451,6 +454,12 @@ async function bootstrapUserAuth() {
plazaPosts = domainServices.plazaPosts;
plazaOps = domainServices.plazaOps;
mindSpaceCleanup = domainServices.mindSpaceCleanup;
mindSpaceOaDrive = createMindSpaceOaDriveService({
h5Root: H5_ROOT,
getMindSpace: () => mindSpace,
getMindSpaceAssets: () => mindSpaceAssets,
getPool: () => pool,
});
mindSpaceWechatMpConfig = createMindSpaceWechatMpConfigService(pool, {
env: process.env,
});
@@ -978,6 +987,13 @@ attachPortalMindSpaceSpaceRoutes(api, {
handleMindSpaceError: mindSpaceError,
});
attachPortalMindSpaceOaDriveRoutes(api, {
getOaDriveService: () => mindSpaceOaDrive,
ensureMindSpaceEnabled,
rawUploadBody,
handleMindSpaceError: mindSpaceError,
});
attachPortalTemplateCatalogRoutes(api, {
getTemplateCatalog: () => templateCatalogService,
ensureMindSpaceEnabled,