Skip to content

Commit d82b6ff

Browse files
author
Gerald Baulig
committed
fix(meta): set meta owners for invoice, calc totals
1 parent c2b6ab7 commit d82b6ff

11 files changed

+562
-445
lines changed

Dockerfile

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ WORKDIR $APP_HOME
2323

2424
COPY --chown=node:node ./cfg $APP_HOME/cfg
2525
COPY --chown=node:node ./queries $APP_HOME/queries
26+
COPY --chown=node:node ./templates $APP_HOME/templates
2627
COPY --chown=node:node --from=build $APP_HOME/lib $APP_HOME/lib
2728

2829
EXPOSE 50051

cfg/config.json

+16-3
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,14 @@
204204
"fullName": "io.restorecommerce.manufacturer.ManufacturerService",
205205
"address": "localhost:50068"
206206
},
207+
"category": {
208+
"fullName": "io.restorecommerce.product_category.ProductCategoryService",
209+
"address": "localhost:50068"
210+
},
211+
"prototype": {
212+
"fullName": "io.restorecommerce.product_prototype.ProductPrototypeService",
213+
"address": "localhost:50068"
214+
},
207215
"address": {
208216
"fullName": "io.restorecommerce.address.AddressService",
209217
"address": "localhost:50053"
@@ -298,6 +306,7 @@
298306
"enforce": true,
299307
"database": "arangoDB",
300308
"urns": {
309+
"order": "urn:restorecommerce:acs:model:order:Order",
301310
"entity": "urn:restorecommerce:acs:names:model:entity",
302311
"user": "urn:restorecommerce:acs:model:user.User",
303312
"model": "urn:restorecommerce:acs:model",
@@ -333,6 +342,10 @@
333342
"db-index": 5,
334343
"ttl": 3600,
335344
"prefix": "acs:"
345+
},
346+
"techUser": {
347+
"id": "root_tech_user",
348+
"token": "1a4c6789-6435-487a-9308-64d06384acf9"
336349
}
337350
},
338351
"statusCodes": {
@@ -395,7 +408,7 @@
395408
"shipping": "shipping",
396409
"billing": "billing"
397410
},
398-
"default": {
411+
"defaults": {
399412
"Setting": {
400413
"shop_fulfillment_evaluate_enabled": true,
401414
"shop_fulfillment_create_enabled": true,
@@ -422,7 +435,7 @@
422435
}
423436
],
424437
"ordinal": 0,
425-
"use_case": "ORDER_CONFIRMATION"
438+
"use_case": "ORDER_CONFIRMATION_EMAIL"
426439
},
427440
{
428441
"body": {
@@ -441,7 +454,7 @@
441454
}
442455
],
443456
"ordinal": 1,
444-
"use_case": "ORDER_CONFIRMATION"
457+
"use_case": "ORDER_CONFIRMATION_EMAIL"
445458
}
446459
]
447460
}

cfg/config_production.json

+9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,15 @@
4040
"product": {
4141
"address": "catalog-srv:50051"
4242
},
43+
"manufacturer": {
44+
"address": "catalog-srv:50051"
45+
},
46+
"category": {
47+
"address": "catalog-srv:50051"
48+
},
49+
"prototype": {
50+
"address": "catalog-srv:50051"
51+
},
4352
"contact_point": {
4453
"address": "resource-srv:50051"
4554
},

src/experimental/AccessControlledServiceBase.ts

+39-19
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
ReadRequest,
3030
type ResourceList,
3131
type ResourceListResponse,
32+
ResourceResponse,
3233
ServiceImplementation,
3334
} from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/resource_base.js';
3435
import {
@@ -141,22 +142,35 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
141142
};
142143
}
143144

144-
/**
145-
* Insecure read, bypassing ACS.
146-
* Override this function to alter read behaviour.
147-
*
148-
* @param request
149-
* @param context
150-
* @returns
151-
*/
152-
protected async insecRead(
145+
protected catchStatusError<T extends ResourceResponse>(e?: any, item?: T): T {
146+
item ??= {} as T;
147+
item.status = {
148+
id: item?.payload?.id,
149+
code: Number.isInteger(e?.code) ? e.code : 500,
150+
message: e?.message ?? e?.details ?? (e ? JSON.stringify(e) : 'Unknown Error!')
151+
};
152+
this.logger?.warn(e?.stack, item);
153+
return item;
154+
}
155+
156+
protected catchOperationError<T extends ResourceListResponse>(e?: any, response?: T): T {
157+
response ??= {} as T;
158+
response.operation_status = {
159+
code: Number.isInteger(e?.code) ? e.code : 500,
160+
message: e?.message ?? e?.details ?? (e ? JSON.stringify(e) : 'Unknown Error!'),
161+
};
162+
this.logger?.error(e?.stack, response);
163+
return response;
164+
}
165+
166+
protected async superRead(
153167
request: ReadRequest,
154168
context?: CallContext,
155169
): Promise<DeepPartial<O>> {
156170
return await super.read(request, context);
157171
}
158172

159-
protected async insecCreate(
173+
protected async superCreate(
160174
request: I,
161175
context?: CallContext,
162176
): Promise<DeepPartial<O>> {
@@ -166,7 +180,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
166180
);
167181
}
168182

169-
protected async insecUpdate(
183+
protected async superUpdate(
170184
request: I,
171185
context?: CallContext,
172186
): Promise<DeepPartial<O>> {
@@ -176,7 +190,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
176190
);
177191
}
178192

179-
protected async insecUpsert(
193+
protected async superUpsert(
180194
request: I,
181195
context?: CallContext,
182196
): Promise<DeepPartial<O>> {
@@ -186,7 +200,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
186200
);
187201
}
188202

189-
protected async insecDelete(
203+
protected async superDelete(
190204
request: DeleteRequest,
191205
context?: CallContext,
192206
): Promise<DeleteResponse> {
@@ -200,6 +214,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
200214
ids: string[],
201215
subject?: Subject,
202216
context?: CallContext,
217+
bypassACS = false,
203218
): Promise<DeepPartial<O>> {
204219
ids = [...new Set(ids)].filter(id => id);
205220
if (ids.length > 1000) {
@@ -225,7 +240,12 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
225240
}],
226241
subject
227242
});
228-
return await this.insecRead(request, context);
243+
if (bypassACS) {
244+
return await this.superRead(request, context);
245+
}
246+
else {
247+
return await this.read(request, context);
248+
}
229249
}
230250

231251
@resolves_subject()
@@ -242,7 +262,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
242262
request: I,
243263
context?: CallContext
244264
): Promise<DeepPartial<O>> {
245-
return await this.insecCreate(request, context);
265+
return await this.superCreate(request, context);
246266
}
247267

248268
@access_controlled_function({
@@ -257,7 +277,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
257277
request: ReadRequest,
258278
context?: CallContext,
259279
): Promise<DeepPartial<O>> {
260-
return await this.insecRead(request, context);
280+
return await this.superRead(request, context);
261281
}
262282

263283
@resolves_subject()
@@ -274,7 +294,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
274294
request: I,
275295
context?: CallContext,
276296
): Promise<DeepPartial<O>> {
277-
return await this.insecUpdate(request, context);
297+
return await this.superUpdate(request, context);
278298
}
279299

280300
@resolves_subject()
@@ -291,7 +311,7 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
291311
request: I,
292312
context?: CallContext,
293313
): Promise<DeepPartial<O>> {
294-
return await this.insecUpsert(request, context);
314+
return await this.superUpsert(request, context);
295315
}
296316

297317
@resolves_subject()
@@ -307,6 +327,6 @@ export class AccessControlledServiceBase<O extends ResourceListResponse, I exten
307327
request: DeleteRequest,
308328
context?: CallContext,
309329
): Promise<DeleteResponse> {
310-
return this.insecDelete(request, context);
330+
return this.superDelete(request, context);
311331
}
312332
}

src/experimental/Pipe.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export class Pipe<I> {
2+
constructor(
3+
public readonly value: I,
4+
) {}
5+
6+
public then<O>(fn: (v: I) => O){
7+
return new Pipe<O>(fn(this.value));
8+
}
9+
}

src/experimental/ResourceAggregator.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ export type ResolverParams<T = any, M = ResolverMap<T>> = [string, Map<string, T
2727
export type ArrayResolverParams<T = any, M = ResolverMap<T>> = [string, Map<string, T>, M[]?, T[]?];
2828
export type ElementOf<T = any> = T extends Array<infer E> ? E : T;
2929
export type ResolverMap<T = any> = {
30-
[K in keyof T]?: ResolverParams<T[K]> & ArrayResolverParams<T[K]> & T[K]
31-
};
30+
[K in keyof T]?: ResolverParams<T[K]> | ArrayResolverParams<T[K]> | T[K]
31+
} & {};
3232
export type ResolvedNode<T, M> = T extends ResolverParams
3333
? (
3434
T[2] extends object
@@ -39,12 +39,12 @@ export type ResolvedNode<T, M> = T extends ResolverParams
3939
? Resolved<T & M, M>
4040
: T;
4141
export type Resolved<T extends ResolverMap, M extends ResolverMap> = {
42-
[K in keyof T]?: T[K] extends object
42+
[K in keyof T]?: T[K] extends object
4343
? ResolvedNode<T[K], M[K]>
4444
: T[K]
4545
};
4646

47-
export const Resolver = <T = any, M = ResolverMap<T>>(
47+
export const Resolver = <T, M>(
4848
search_key: string,
4949
source: Map<string, T>,
5050
map?: M,
@@ -55,7 +55,7 @@ export const Resolver = <T = any, M = ResolverMap<T>>(
5555
{} as T,
5656
];
5757

58-
export const ArrayResolver = <T = any, M = ResolverMap<T[]>>(
58+
export const ArrayResolver = <T, M>(
5959
search_key: string,
6060
source: Map<string, T>,
6161
map?: M,
@@ -111,7 +111,7 @@ export class ResourceAggregator {
111111
return map;
112112
}
113113

114-
public async aggregate<T extends ResourceListResponse | ResourceList, C>(
114+
public async aggregate<T extends object, C>(
115115
target: T,
116116
sources: {
117117
service: CRUDServiceDefinition;

src/experimental/ResourceMap.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,6 @@ export class ResourceMap<T extends Resource = any> extends Map<string, T> {
7575
ids: string[],
7676
onMissing: OnMissingCallback = DEFAULT_STRICT_CALLBACK
7777
): T[] {
78-
return ids.map(id => this.get(id, onMissing));
78+
return ids?.map(id => this.get(id, onMissing));
7979
}
8080
}

src/experimental/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ export * from './ClientRegister.js';
22
export * from './ResourceAggregator.js';
33
export * from './ResourceAwaitQueue.js';
44
export * from './ResourceMap.js';
5-
export * from './WorkerBase.js';
5+
export * from './WorkerBase.js';
6+
export * from './Pipe.js';

0 commit comments

Comments
 (0)