diff --git a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/__tests__/api.test.ts b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/__tests__/api.test.ts index dd066ead86..8619c3d9bf 100644 --- a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/__tests__/api.test.ts +++ b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/__tests__/api.test.ts @@ -51,4 +51,23 @@ describe('api', async () => { nickname: 'test', }); }); + + it('push data with unsupported type', async () => { + const res = await agent.resource('userData').push({ + values: { + dataType: 'unsupported', + records: [ + { + uid: '1', + nickname: 'test', + }, + ], + }, + }); + expect(res.status).toBe(500); + expect(res.body.data).toMatchObject({ + code: 500, + message: 'dataType unsupported is not supported', + }); + }); }); diff --git a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/actions/user-data.ts b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/actions/user-data.ts index 6aa15f9326..b9238fec93 100644 --- a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/actions/user-data.ts +++ b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/actions/user-data.ts @@ -26,6 +26,15 @@ export default { const data = ctx.action.params.values || {}; const plugin = ctx.app.pm.get(PluginUserDataSyncServer) as PluginUserDataSyncServer; try { + let supported = false; + for (const resource of plugin.resourceManager.resources.nodes) { + if (resource.accepts.includes(data.dataType)) { + supported = true; + } + } + if (!supported) { + throw new Error(`dataType ${data.dataType} is not supported`); + } const result = await plugin.syncService.push(data); ctx.body = { code: 0, message: 'success', result }; } catch (error) { diff --git a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/plugin.ts b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/plugin.ts index 1bc33301c4..2d5507b880 100644 --- a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/plugin.ts +++ b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/plugin.ts @@ -55,7 +55,7 @@ export class PluginUserDataSyncServer extends Plugin { this.app.acl.registerSnippet({ name: `pm.${this.name}`, - actions: ['userData:*', 'userDataSyncSources:*'], + actions: ['userData:*', 'userDataSyncSources:*', 'userDataSyncTasks:*'], }); } diff --git a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/user-data-resource-manager.ts b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/user-data-resource-manager.ts index 5b0bc9dfcf..607bd2a9cb 100644 --- a/packages/plugins/@nocobase/plugin-user-data-sync/src/server/user-data-resource-manager.ts +++ b/packages/plugins/@nocobase/plugin-user-data-sync/src/server/user-data-resource-manager.ts @@ -194,14 +194,12 @@ export class UserDataResourceManager { await this.saveOriginRecords(data); const { dataType, sourceName, records, matchKey } = data; const sourceUks = records.map((record) => record.uid); - let processed = false; const syncResults: SyncResult[] = []; for (const resource of this.resources.nodes) { if (!resource.accepts.includes(dataType)) { continue; } const associateResource = resource.name; - processed = true; const originRecords = await this.findOriginRecords({ sourceName, sourceUks, dataType }); if (!(originRecords && originRecords.length)) { continue; @@ -266,9 +264,6 @@ export class UserDataResourceManager { }, }); } - if (!processed) { - throw new Error(`dataType "${dataType}" is not support`); - } return syncResults; } }