From e1f1994e33e82f407f4082df4627b48c73ea7dcd Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Wed, 8 Jul 2026 09:42:46 +0200 Subject: [PATCH 1/3] [NAE-2451] Release 1.0.1 Bugfixes Updated resource service methods to include additional query fields (`outcomes`, `outcome`, `task(stringId)`, etc.) for task and case-related API calls. This enhancement ensures more comprehensive data retrieval for operations like assign, cancel, delegate, finish, and data manipulation. --- .../engine-endpoint/case-resource.service.ts | 4 ++-- .../engine-endpoint/task-resource.service.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts index 67b4c9763b..13b8dfb2a0 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts @@ -70,7 +70,7 @@ export class CaseResourceService extends AbstractResourceService implements Coun * {{baseUrl}}/api/workflow/case/:id */ public deleteCase(caseID: string, deleteSubtree = false): Observable { - return this._resourceProvider.delete$('workflow/case/' + caseID, + return this._resourceProvider.delete$('workflow/case/?fields=outcomes,case(stringId)' + caseID, this.SERVER_URL, deleteSubtree ? {deleteSubtree: deleteSubtree.toString()} : {}) .pipe(map(r => this.changeType(r, undefined))); @@ -95,7 +95,7 @@ export class CaseResourceService extends AbstractResourceService implements Coun * {{baseUrl}}/api/workflow/case */ public createCase(body: CreateCaseRequestBody): Observable { - return this._resourceProvider.post$('workflow/case/', this.SERVER_URL, body).pipe(map(r => this.changeType(r, undefined))); + return this._resourceProvider.post$('workflow/case/?fields=outcomes,case(stringId)', this.SERVER_URL, body).pipe(map(r => this.changeType(r, undefined))); } /** diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts index ce3918d8d3..c6b7e4fff5 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts @@ -62,7 +62,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun */ // {{baseUrl}}/api/task/assign/:id public assignTask(taskId: string): Observable { - return this._resourceProvider.get$('task/assign/' + taskId, this.SERVER_URL) + return this._resourceProvider.get$('task/assign/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL) .pipe(map(r => this.changeType(r, undefined))); } @@ -72,7 +72,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun */ // {{baseUrl}}/api/task/cancel/:id public cancelTask(taskId: string): Observable { - return this._resourceProvider.get$('task/cancel/' + taskId, this.SERVER_URL) + return this._resourceProvider.get$('task/cancel/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL) .pipe(map(r => this.changeType(r, undefined))); } @@ -82,7 +82,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun */ // {{baseUrl}}/api/task/delegate/:id public delegateTask(taskId: string, body: object): Observable { - return this._resourceProvider.post$('task/delegate/' + taskId, this.SERVER_URL, body, undefined, {'Content-Type': 'text/plain'}) + return this._resourceProvider.post$('task/delegate/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL, body, undefined, {'Content-Type': 'text/plain'}) .pipe(map(r => this.changeType(r, undefined))); } @@ -92,7 +92,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun */ // {{baseUrl}}/api/task/finish/:id public finishTask(taskId: string): Observable { - return this._resourceProvider.get$('task/finish/' + taskId, this.SERVER_URL) + return this._resourceProvider.get$('task/finish/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL) .pipe(map(r => this.changeType(r, undefined))); } @@ -188,7 +188,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun */ // {{baseUrl}}/api/task/:id/data public rawGetData(taskId: string): Observable { - return this._resourceProvider.get$('task/' + taskId + '/data', this.SERVER_URL) + return this._resourceProvider.get$('task/' + taskId + '/data/?fields=outcomes,task(stringId),data', this.SERVER_URL) .pipe(map(r => this.changeType(r, undefined))); } @@ -254,7 +254,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun */ // {{baseUrl}}/api/task/:id/data public setData(taskId: string, body: TaskSetDataRequestBody): Observable { - return this._resourceProvider.post$('task/' + taskId + '/data', this.SERVER_URL, body) + return this._resourceProvider.post$('task/' + taskId + '/data?fields=outcomes,task(stringId),data', this.SERVER_URL, body) .pipe(map(r => this.changeType(r, undefined))); } From d2daedee218449e7c6f69ab7388ad9d814614a91 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Wed, 8 Jul 2026 14:46:25 +0200 Subject: [PATCH 2/3] [NAE-2451] Optimize and Reduce Outcome Size Updated resource service methods to include additional query fields (`outcomes`, `outcome`, `task(stringId)`, etc.) for task and case-related API calls. This enhancement ensures more comprehensive data retrieval for operations like assign, cancel, delegate, finish, and data manipulation. --- .../engine-endpoint/case-resource.service.ts | 21 +++++--- .../public/public-task-resource.service.ts | 40 ++++++++++---- .../engine-endpoint/task-resource.service.ts | 53 ++++++++++++++----- 3 files changed, 84 insertions(+), 30 deletions(-) diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts index 13b8dfb2a0..ba726da7b6 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.ts @@ -69,10 +69,15 @@ export class CaseResourceService extends AbstractResourceService implements Coun * DELETE * {{baseUrl}}/api/workflow/case/:id */ - public deleteCase(caseID: string, deleteSubtree = false): Observable { - return this._resourceProvider.delete$('workflow/case/?fields=outcomes,case(stringId)' + caseID, - this.SERVER_URL, - deleteSubtree ? {deleteSubtree: deleteSubtree.toString()} : {}) + public deleteCase(caseID: string, deleteSubtree = false, params?: HttpParams): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,case(stringId)'); + } + if (deleteSubtree) { + params = params.set('deleteSubtree', deleteSubtree.toString()); + } + return this._resourceProvider.delete$('workflow/case/' + caseID, this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -94,8 +99,12 @@ export class CaseResourceService extends AbstractResourceService implements Coun * POST * {{baseUrl}}/api/workflow/case */ - public createCase(body: CreateCaseRequestBody): Observable { - return this._resourceProvider.post$('workflow/case/?fields=outcomes,case(stringId)', this.SERVER_URL, body).pipe(map(r => this.changeType(r, undefined))); + public createCase(body: CreateCaseRequestBody, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,case'); + } + return this._resourceProvider.post$('workflow/case/', this.SERVER_URL, body, params).pipe(map(r => this.changeType(r, undefined))); } /** diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/public/public-task-resource.service.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/public/public-task-resource.service.ts index 9809009a72..b9eb4ea91e 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/public/public-task-resource.service.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/public/public-task-resource.service.ts @@ -33,8 +33,12 @@ export class PublicTaskResourceService extends TaskResourceService { * GET */ // {{baseUrl}}/api/public/task/assign/:id - public assignTask(taskId: string): Observable { - return this._provider.get$('public/task/assign/' + taskId, this.SERVER_URL) + public assignTask(taskId: string, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId),data'); + } + return this._provider.get$('public/task/assign/' + taskId, this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -43,8 +47,12 @@ export class PublicTaskResourceService extends TaskResourceService { * GET */ // {{baseUrl}}/api/public/task/cancel/:id - public cancelTask(taskId: string): Observable { - return this._provider.get$('public/task/cancel/' + taskId, this.SERVER_URL) + public cancelTask(taskId: string, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId),data'); + } + return this._provider.get$('public/task/cancel/' + taskId, this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -53,8 +61,12 @@ export class PublicTaskResourceService extends TaskResourceService { * GET */ // {{baseUrl}}/api/public/task/finish/:id - public finishTask(taskId: string): Observable { - return this._provider.get$('public/task/finish/' + taskId, this.SERVER_URL) + public finishTask(taskId: string, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId),data'); + } + return this._provider.get$('public/task/finish/' + taskId, this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -78,8 +90,12 @@ export class PublicTaskResourceService extends TaskResourceService { * @returns the raw backend response without any additional processing */ // {{baseUrl}}/api/public/task/:id/data - public rawGetData(taskId: string): Observable { - return this._provider.get$('public/task/' + taskId + '/data', this.SERVER_URL) + public rawGetData(taskId: string, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId),data,data'); + } + return this._provider.get$('public/task/' + taskId + '/data', this.SERVER_URL, params) .pipe(map(r => this.changeType(r, 'dataGroups'))); } @@ -88,8 +104,12 @@ export class PublicTaskResourceService extends TaskResourceService { * POST */ // {{baseUrl}}/api/public/task/:id/data - public setData(taskId: string, body: TaskSetDataRequestBody): Observable { - return this._provider.post$('public/task/' + taskId + '/data', this.SERVER_URL, body) + public setData(taskId: string, body: TaskSetDataRequestBody, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId),data,data'); + } + return this._provider.post$('public/task/' + taskId + '/data', this.SERVER_URL, body, params) .pipe(map(r => this.changeType(r, undefined))); } diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts index c6b7e4fff5..0b591ae952 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts @@ -61,8 +61,12 @@ export class TaskResourceService extends AbstractResourceService implements Coun * GET */ // {{baseUrl}}/api/task/assign/:id - public assignTask(taskId: string): Observable { - return this._resourceProvider.get$('task/assign/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL) + public assignTask(taskId: string, params?: HttpParams): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId)'); + } + return this._resourceProvider.get$('task/assign/' + taskId, this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -71,8 +75,12 @@ export class TaskResourceService extends AbstractResourceService implements Coun * GET */ // {{baseUrl}}/api/task/cancel/:id - public cancelTask(taskId: string): Observable { - return this._resourceProvider.get$('task/cancel/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL) + public cancelTask(taskId: string, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId)'); + } + return this._resourceProvider.get$('task/cancel/' + taskId, this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -81,8 +89,12 @@ export class TaskResourceService extends AbstractResourceService implements Coun * POST */ // {{baseUrl}}/api/task/delegate/:id - public delegateTask(taskId: string, body: object): Observable { - return this._resourceProvider.post$('task/delegate/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL, body, undefined, {'Content-Type': 'text/plain'}) + public delegateTask(taskId: string, body: object, params?: HttpParams): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId)'); + } + return this._resourceProvider.post$('task/delegate/' + taskId, this.SERVER_URL, body, params, {'Content-Type': 'text/plain'}) .pipe(map(r => this.changeType(r, undefined))); } @@ -91,8 +103,12 @@ export class TaskResourceService extends AbstractResourceService implements Coun * GET */ // {{baseUrl}}/api/task/finish/:id - public finishTask(taskId: string): Observable { - return this._resourceProvider.get$('task/finish/' + taskId + "?fields=outcomes,outcome,task(stringId)", this.SERVER_URL) + public finishTask(taskId: string, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,task(stringId)'); + } + return this._resourceProvider.get$('task/finish/' + taskId, this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -187,8 +203,12 @@ export class TaskResourceService extends AbstractResourceService implements Coun * @returns the raw backend response without any additional processing */ // {{baseUrl}}/api/task/:id/data - public rawGetData(taskId: string): Observable { - return this._resourceProvider.get$('task/' + taskId + '/data/?fields=outcomes,task(stringId),data', this.SERVER_URL) + public rawGetData(taskId: string, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,task(stringId),data'); + } + return this._resourceProvider.get$('task/' + taskId + "/data/", this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -200,10 +220,11 @@ export class TaskResourceService extends AbstractResourceService implements Coun * If you want to process the raw backend response use [rawGetData]{@link TaskResourceService#rawGetData} instead. * * @param taskId ID of the task who's data should be retrieved from the server + * @param params HTTP params * @returns processed data groups of the given task. If the task has no data an empty array will be returned. */ - public getData(taskId: string): Observable> { - return this.rawGetData(taskId).pipe( + public getData(taskId: string, params?: Params): Observable> { + return this.rawGetData(taskId, params).pipe( map((responseOutcome: EventOutcomeMessageResource) => { if (responseOutcome.error) { throw new Error(responseOutcome.error); @@ -253,8 +274,12 @@ export class TaskResourceService extends AbstractResourceService implements Coun * POST */ // {{baseUrl}}/api/task/:id/data - public setData(taskId: string, body: TaskSetDataRequestBody): Observable { - return this._resourceProvider.post$('task/' + taskId + '/data?fields=outcomes,task(stringId),data', this.SERVER_URL, body) + public setData(taskId: string, body: TaskSetDataRequestBody, params?: Params): Observable { + if (!params) { + params = new HttpParams(); + params = params.set('fields', 'outcomes,outcome,case(stringId),task(stringId),changedFields'); + } + return this._resourceProvider.post$('task/' + taskId + "/data/", this.SERVER_URL, body, params) .pipe(map(r => this.changeType(r, undefined))); } From 85f318e83a0e63c94a57281ad287562bdabf22c4 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Thu, 9 Jul 2026 12:47:16 +0200 Subject: [PATCH 3/3] [NAE-2451] Optimize and Reduce Outcome Size Enhanced task and case-related API methods by introducing `HttpParams` to support additional query parameters. This change enables more versatile and detailed requests for task and case operations. --- .../engine-endpoint/case-resource.service.spec.ts | 4 ++-- .../engine-endpoint/task-resource.service.spec.ts | 13 +++++++------ .../engine-endpoint/task-resource.service.ts | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.spec.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.spec.ts index 1efd26eb2e..b0a221359f 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.spec.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/case-resource.service.spec.ts @@ -75,7 +75,7 @@ describe('CaseResourceService', () => { it('should deleteCase', (done) => { inject([HttpTestingController], (httpMock: HttpTestingController) => { - service.deleteCase('id').subscribe(res => { + service.deleteCase('id', false, new HttpParams()).subscribe(res => { expect(res.success).toEqual('Done'); done(); }); @@ -113,7 +113,7 @@ describe('CaseResourceService', () => { service.createCase({ title: '', netId: '' - }).subscribe(res => { + }, new HttpParams()).subscribe(res => { expect((res.outcome as CreateCaseEventOutcome).aCase.stringId).toEqual('string'); done(); }); diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.spec.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.spec.ts index 6e55219f34..57a97f5883 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.spec.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.spec.ts @@ -6,6 +6,7 @@ import {SimpleFilter} from '../../filter/models/simple-filter'; import {FilterType} from '../../filter/models/filter-type'; import {TaskResourceService} from './task-resource.service'; import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {HttpParams} from "@angular/common/http"; describe('TaskResourceService', () => { let service: TaskResourceService; @@ -57,7 +58,7 @@ describe('TaskResourceService', () => { it('should assignTask', (done) => { inject([HttpTestingController], (httpMock: HttpTestingController) => { - service.assignTask('id').subscribe(res => { + service.assignTask('id', new HttpParams()).subscribe(res => { expect(res.success).toEqual('Success'); done(); }); @@ -73,7 +74,7 @@ describe('TaskResourceService', () => { it('should cancelTask', (done) => { inject([HttpTestingController], (httpMock: HttpTestingController) => { - service.cancelTask('id').subscribe(res => { + service.cancelTask('id', new HttpParams()).subscribe(res => { expect(res.success).toEqual('Success'); done(); }); @@ -89,7 +90,7 @@ describe('TaskResourceService', () => { it('should delegateTask', (done) => { inject([HttpTestingController], (httpMock: HttpTestingController) => { - service.delegateTask('id', {userId: 5}).subscribe(res => { + service.delegateTask('id', {userId: 5}, new HttpParams()).subscribe(res => { expect(res.success).toEqual('Success'); done(); }); @@ -105,7 +106,7 @@ describe('TaskResourceService', () => { it('should finishTask', (done) => { inject([HttpTestingController], (httpMock: HttpTestingController) => { - service.finishTask('id').subscribe(res => { + service.finishTask('id', new HttpParams()).subscribe(res => { expect(res.success).toEqual('Success'); done(); }); @@ -217,7 +218,7 @@ describe('TaskResourceService', () => { it('should getData', (done) => { inject([HttpTestingController], (httpMock: HttpTestingController) => { - service.getData('id').subscribe(res => { + service.getData('id', new HttpParams()).subscribe(res => { expect(res.length).toEqual(0); done(); }); @@ -242,7 +243,7 @@ describe('TaskResourceService', () => { it('should setData', (done) => { inject([HttpTestingController], (httpMock: HttpTestingController) => { - service.setData('id', {}).subscribe(res => { + service.setData('id', {}, new HttpParams()).subscribe(res => { expect(res.outcome).toBeTruthy(); done(); }); diff --git a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts index 0b591ae952..d87a9d7f15 100644 --- a/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts +++ b/projects/netgrif-components-core/src/lib/resources/engine-endpoint/task-resource.service.ts @@ -208,7 +208,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun params = new HttpParams(); params = params.set('fields', 'outcomes,task(stringId),data'); } - return this._resourceProvider.get$('task/' + taskId + "/data/", this.SERVER_URL, params) + return this._resourceProvider.get$('task/' + taskId + "/data", this.SERVER_URL, params) .pipe(map(r => this.changeType(r, undefined))); } @@ -279,7 +279,7 @@ export class TaskResourceService extends AbstractResourceService implements Coun params = new HttpParams(); params = params.set('fields', 'outcomes,outcome,case(stringId),task(stringId),changedFields'); } - return this._resourceProvider.post$('task/' + taskId + "/data/", this.SERVER_URL, body, params) + return this._resourceProvider.post$('task/' + taskId + "/data", this.SERVER_URL, body, params) .pipe(map(r => this.changeType(r, undefined))); }