From d8d89032aedfc58ae3c04709f92e2dd10fb10495 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 14 Mar 2025 16:37:14 +0100 Subject: [PATCH] feat: Implement onlyOwnedFlows filter to get flows API endpoint --- .../src/controllers/api/v1/flows/get-flows.js | 7 +++++- packages/backend/src/models/user.js | 6 ++++- packages/backend/src/models/user.test.js | 25 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/controllers/api/v1/flows/get-flows.js b/packages/backend/src/controllers/api/v1/flows/get-flows.js index 98373ce5..4cac62e0 100644 --- a/packages/backend/src/controllers/api/v1/flows/get-flows.js +++ b/packages/backend/src/controllers/api/v1/flows/get-flows.js @@ -16,5 +16,10 @@ export default async (request, response) => { }; const flowParams = (request) => { - return { folderId: request.query.folderId, name: request.query.name }; + return { + folderId: request.query.folderId, + name: request.query.name, + status: request.query.status, + onlyOwnedFlows: request.query.onlyOwnedFlows, + }; }; diff --git a/packages/backend/src/models/user.js b/packages/backend/src/models/user.js index 1e8b51a7..08243fb0 100644 --- a/packages/backend/src/models/user.js +++ b/packages/backend/src/models/user.js @@ -531,7 +531,7 @@ class User extends Base { return folders.map((folder) => folder.id); } - getFlows({ folderId, name, status }, ownedFolderIds) { + getFlows({ folderId, name, status, onlyOwnedFlows }, ownedFolderIds) { return this.authorizedFlows .clone() .withGraphFetched({ @@ -548,6 +548,10 @@ class User extends Base { builder.where('flows.active', false); } + if (onlyOwnedFlows) { + builder.where('flows.user_id', this.id); + } + if (folderId === 'null') { builder .whereNull('flows.folder_id') diff --git a/packages/backend/src/models/user.test.js b/packages/backend/src/models/user.test.js index 86a27e04..c94b6026 100644 --- a/packages/backend/src/models/user.test.js +++ b/packages/backend/src/models/user.test.js @@ -1258,6 +1258,16 @@ describe('User model', () => { expect(flows[0].id).toBe(flowOne.id); }); + it('should return flows filtered by onlyOwnedFlows', async () => { + const flows = await currentUser.getFlows({ onlyOwnedFlows: true }, [ + folder.id, + ]); + + expect(flows).toHaveLength(2); + expect(flows[0].id).toBe(flowOne.id); + expect(flows[1].id).toBe(flowTwo.id); + }); + it('should return flows with specific folder ID', async () => { const flows = await currentUser.getFlows({ folderId: folder.id }, [ folder.id, @@ -1310,6 +1320,21 @@ describe('User model', () => { expect.arrayContaining([flowTwo.id, flowThree.id]) ); }); + + it('should return specified flows with all filters together', async () => { + const flows = await currentUser.getFlows( + { + folderId: folder.id, + name: 'Flow One', + status: 'published', + onlyOwnedFlows: true, + }, + [folder.id] + ); + + expect(flows).toHaveLength(1); + expect(flows[0].id).toBe(flowOne.id); + }); }); it.todo('getApps');