Skip to content

Commit 89412b9

Browse files
author
Gerald Baulig
committed
intermediate
1 parent 97b5d28 commit 89412b9

File tree

3 files changed

+182
-16
lines changed

3 files changed

+182
-16
lines changed

src/services/fulfillment.ts

+48-14
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@ import {
88
access_controlled_function,
99
access_controlled_service,
1010
DefaultACSClientContextFactory,
11-
Operation
11+
Operation,
12+
DefaultResourceFactory,
13+
injects_meta_data
1214
} from '@restorecommerce/acs-client';
1315
import { DatabaseProvider } from '@restorecommerce/chassis-srv';
1416
import { Topic } from '@restorecommerce/kafka-client';
1517
import { DeepPartial } from '@restorecommerce/kafka-client/lib/protos';
16-
import { ReadRequest } from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/resource_base';
18+
import { DeleteRequest, ReadRequest } from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/resource_base';
1719
import {
1820
OperationStatus,
1921
Status,
@@ -89,15 +91,18 @@ export class FulfillmentService
8991
{
9092
private static async ACSContextFactory(
9193
self: FulfillmentService,
92-
request: FulfillmentList | FulfillmentIdList | FulfillmentInvoiceRequestList,
94+
request: FulfillmentList & FulfillmentIdList & FulfillmentInvoiceRequestList,
9395
context: any,
9496
): Promise<ACSClientContext> {
9597
const ids = request.items?.map((item: any) => item.id);
9698
const resources = await self.getFulfillmentsByIds(ids, request.subject, context);
9799
return {
98100
...context,
99101
subject: request.subject,
100-
resources,
102+
resources: [
103+
...resources.items ?? [],
104+
...request.items ?? [],
105+
],
101106
};
102107
}
103108

@@ -348,7 +353,11 @@ export class FulfillmentService
348353
));
349354
}
350355

351-
protected getFulfillmentsByIds(ids: string[], subject?: Subject, context?: any): Promise<DeepPartial<FulfillmentListResponse>> {
356+
protected getFulfillmentsByIds(
357+
ids: string[],
358+
subject?: Subject,
359+
context?: any
360+
): Promise<DeepPartial<FulfillmentListResponse>> {
352361
ids = [...new Set(ids).values()];
353362
if (ids.length > 1000) {
354363
throw {
@@ -645,26 +654,34 @@ export class FulfillmentService
645654
return super.read(request, context);
646655
}
647656

657+
@injects_meta_data()
648658
@access_controlled_function({
649659
action: AuthZAction.CREATE,
650660
operation: Operation.isAllowed,
651661
context: FulfillmentService.ACSContextFactory,
652-
resource: [{ resource: 'fulfillment' }],
662+
resource: DefaultResourceFactory('fulfillment'),
653663
database: 'arangoDB',
654664
useCache: true,
655665
})
656666
public override create(
657667
request: FulfillmentList,
658668
context?: any
659669
) {
670+
request?.items?.forEach(
671+
item => {
672+
if (!item.state || item.state === State.UNRECOGNIZED) {
673+
item.state = State.CREATED;
674+
}
675+
}
676+
);
660677
return super.create(request, context);
661678
}
662679

663680
@access_controlled_function({
664681
action: AuthZAction.MODIFY,
665682
operation: Operation.isAllowed,
666683
context: FulfillmentService.ACSContextFactory,
667-
resource: [{ resource: 'fulfillment' }],
684+
resource: DefaultResourceFactory('fulfillment'),
668685
database: 'arangoDB',
669686
useCache: true,
670687
})
@@ -675,11 +692,12 @@ export class FulfillmentService
675692
return super.update(request, context);
676693
}
677694

695+
@injects_meta_data()
678696
@access_controlled_function({
679697
action: AuthZAction.MODIFY,
680698
operation: Operation.isAllowed,
681699
context: FulfillmentService.ACSContextFactory,
682-
resource: [{ resource: 'fulfillment' }],
700+
resource: DefaultResourceFactory('fulfillment'),
683701
database: 'arangoDB',
684702
useCache: true,
685703
})
@@ -693,8 +711,8 @@ export class FulfillmentService
693711
@access_controlled_function({
694712
action: AuthZAction.EXECUTE,
695713
operation: Operation.isAllowed,
696-
context: FulfillmentService.ACSContextFactory,
697-
resource: [{ resource: 'fulfillment' }],
714+
context: DefaultACSClientContextFactory,
715+
resource: DefaultResourceFactory('fulfillment'),
698716
database: 'arangoDB',
699717
useCache: true,
700718
})
@@ -726,11 +744,12 @@ export class FulfillmentService
726744
}
727745
}
728746

747+
@injects_meta_data()
729748
@access_controlled_function({
730749
action: AuthZAction.EXECUTE,
731750
operation: Operation.isAllowed,
732751
context: FulfillmentService.ACSContextFactory,
733-
resource: [{ resource: 'fulfillment' }],
752+
resource: DefaultResourceFactory('execution.submitFulfillments'),
734753
database: 'arangoDB',
735754
useCache: true,
736755
})
@@ -805,7 +824,7 @@ export class FulfillmentService
805824
action: AuthZAction.EXECUTE,
806825
operation: Operation.isAllowed,
807826
context: FulfillmentService.ACSContextFactory,
808-
resource: [{ resource: 'fulfillment' }],
827+
resource: DefaultResourceFactory('execution.trackFulfillments'),
809828
database: 'arangoDB',
810829
useCache: true,
811830
})
@@ -960,7 +979,7 @@ export class FulfillmentService
960979
action: AuthZAction.EXECUTE,
961980
operation: Operation.isAllowed,
962981
context: FulfillmentService.ACSContextFactory,
963-
resource: [{ resource: 'fulfillment' }],
982+
resource: DefaultResourceFactory('execution.withdrawOrder'),
964983
database: 'arangoDB',
965984
useCache: true,
966985
})
@@ -972,7 +991,7 @@ export class FulfillmentService
972991
action: AuthZAction.EXECUTE,
973992
operation: Operation.isAllowed,
974993
context: FulfillmentService.ACSContextFactory,
975-
resource: [{ resource: 'fulfillment' }],
994+
resource: DefaultResourceFactory('execution.cancelFulfillments'),
976995
database: 'arangoDB',
977996
useCache: true,
978997
})
@@ -1088,6 +1107,21 @@ export class FulfillmentService
10881107
}
10891108
}
10901109

1110+
@access_controlled_function({
1111+
action: AuthZAction.DELETE,
1112+
operation: Operation.isAllowed,
1113+
context: FulfillmentService.ACSContextFactory,
1114+
resource: DefaultResourceFactory('order'),
1115+
database: 'arangoDB',
1116+
useCache: true,
1117+
})
1118+
public override delete(
1119+
request: DeleteRequest,
1120+
context: any,
1121+
) {
1122+
return super.delete(request, context);
1123+
}
1124+
10911125
@access_controlled_function({
10921126
action: AuthZAction.CREATE,
10931127
operation: Operation.isAllowed,

src/services/fulfillment_product.ts

+134-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ResourcesAPIBase, ServiceBase } from '@restorecommerce/resource-base-in
99
import { DatabaseProvider } from '@restorecommerce/chassis-srv';
1010
import { Topic } from '@restorecommerce/kafka-client';
1111
import { DeepPartial } from '@restorecommerce/kafka-client/lib/protos';
12-
import { ReadRequest } from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/resource_base';
12+
import { DeleteRequest, ReadRequest } from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/resource_base';
1313
import {
1414
FilterOp_Operator,
1515
Filter_Operation,
@@ -66,6 +66,16 @@ import {
6666
CustomerResponseMap,
6767
filterTax,
6868
} from '..';
69+
import {
70+
ACSClientContext,
71+
AuthZAction,
72+
DefaultACSClientContextFactory,
73+
DefaultResourceFactory,
74+
Operation,
75+
access_controlled_function,
76+
access_controlled_service,
77+
injects_meta_data
78+
} from '@restorecommerce/acs-client';
6979

7080

7181
interface PackageSolutionTotals extends PackingSolutionQuery {
@@ -107,10 +117,28 @@ const countItems = (goods: Item[], container: Container) => {
107117
return [...item_map.values()];
108118
};
109119

120+
@access_controlled_service
110121
export class FulfillmentProductService
111122
extends ServiceBase<FulfillmentProductListResponse, FulfillmentProductList>
112123
implements FulfillmentProductServiceImplementation
113124
{
125+
private static async ACSContextFactory(
126+
self: FulfillmentProductService,
127+
request: FulfillmentProductList,
128+
context: any,
129+
): Promise<ACSClientContext> {
130+
const ids = request.items?.map((item: any) => item.id);
131+
const resources = await self.getFulfillmentProductsByIds(ids, request.subject, context);
132+
return {
133+
...context,
134+
subject: request.subject,
135+
resources: [
136+
...resources.items ?? [],
137+
...request.items ?? [],
138+
],
139+
};
140+
}
141+
114142
protected readonly status_codes: { [key: string]: Status } = {
115143
OK: {
116144
id: '',
@@ -383,6 +411,33 @@ export class FulfillmentProductService
383411
));
384412
}
385413

414+
protected getFulfillmentProductsByIds(
415+
ids: string[],
416+
subject?: Subject,
417+
context?: any
418+
): Promise<DeepPartial<FulfillmentProductListResponse>> {
419+
ids = [...new Set(ids).values()];
420+
if (ids.length > 1000) {
421+
throw {
422+
code: 500,
423+
message: 'Query for fulfillmentProducts exceeds limit of 1000!'
424+
} as OperationStatus
425+
}
426+
427+
const request = ReadRequest.fromPartial({
428+
filters: [{
429+
filters: [{
430+
field: 'id',
431+
operation: Filter_Operation.in,
432+
value: JSON.stringify(ids),
433+
type: Filter_ValueType.ARRAY
434+
}]
435+
}],
436+
subject
437+
});
438+
return super.read(request, context);
439+
}
440+
386441
protected async findCouriers(
387442
queries: PackageSolutionTotals[],
388443
subject?: Subject,
@@ -441,7 +496,69 @@ export class FulfillmentProductService
441496
subject,
442497
});
443498

444-
return this.read(call, context);
499+
return super.read(call, context);
500+
}
501+
502+
@access_controlled_function({
503+
action: AuthZAction.READ,
504+
operation: Operation.whatIsAllowed,
505+
context: DefaultACSClientContextFactory,
506+
resource: [{ resource: 'fulfillment' }],
507+
database: 'arangoDB',
508+
useCache: true,
509+
})
510+
public override read(
511+
request: ReadRequest,
512+
context?: any
513+
) {
514+
return super.read(request, context);
515+
}
516+
517+
@injects_meta_data()
518+
@access_controlled_function({
519+
action: AuthZAction.CREATE,
520+
operation: Operation.isAllowed,
521+
context: FulfillmentProductService.ACSContextFactory,
522+
resource: DefaultResourceFactory('fulfillment'),
523+
database: 'arangoDB',
524+
useCache: true,
525+
})
526+
public override create(
527+
request: FulfillmentProductList,
528+
context?: any
529+
) {
530+
return super.create(request, context);
531+
}
532+
533+
@access_controlled_function({
534+
action: AuthZAction.MODIFY,
535+
operation: Operation.isAllowed,
536+
context: FulfillmentProductService.ACSContextFactory,
537+
resource: DefaultResourceFactory('fulfillment'),
538+
database: 'arangoDB',
539+
useCache: true,
540+
})
541+
public override update(
542+
request: FulfillmentProductList,
543+
context?: any
544+
) {
545+
return super.update(request, context);
546+
}
547+
548+
@injects_meta_data()
549+
@access_controlled_function({
550+
action: AuthZAction.MODIFY,
551+
operation: Operation.isAllowed,
552+
context: FulfillmentProductService.ACSContextFactory,
553+
resource: DefaultResourceFactory('fulfillment'),
554+
database: 'arangoDB',
555+
useCache: true,
556+
})
557+
public override upsert(
558+
request: FulfillmentProductList,
559+
context?: any
560+
) {
561+
return super.upsert(request, context);
445562
}
446563

447564
async find(request: PackingSolutionQueryList, context?: any): Promise<PackingSolutionListResponse> {
@@ -787,4 +904,19 @@ export class FulfillmentProductService
787904
this.catchOperationError(e);
788905
}
789906
}
907+
908+
@access_controlled_function({
909+
action: AuthZAction.DELETE,
910+
operation: Operation.isAllowed,
911+
context: FulfillmentProductService.ACSContextFactory,
912+
resource: DefaultResourceFactory('order'),
913+
database: 'arangoDB',
914+
useCache: true,
915+
})
916+
public override delete(
917+
request: DeleteRequest,
918+
context: any,
919+
) {
920+
return super.delete(request, context);
921+
}
790922
}

src/stubs/dummy.ts

Whitespace-only changes.

0 commit comments

Comments
 (0)