@restorecommerce/resource-base-interface 0.0.9 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,6 +14,18 @@ const _ = require("lodash");
14
14
  const chassis = require("@restorecommerce/chassis-srv");
15
15
  const index_1 = require("../index");
16
16
  const errors = chassis.errors;
17
+ // Mapping of arangodb error codes to standard HTTP error codes
18
+ const arangoHttpErrCodeMap = new Map([
19
+ [1210, 409],
20
+ [1200, 409],
21
+ [1201, 400],
22
+ [1202, 404],
23
+ [1203, 404],
24
+ [1204, 400],
25
+ [1205, 400],
26
+ [1207, 409],
27
+ [1228, 404], // ERROR_ARANGO_DATABASE_NOT_FOUND
28
+ ]);
17
29
  /**
18
30
  * A microservice chassis ready class which provides endpoints for
19
31
  * CRUD resource operations.
@@ -33,6 +45,7 @@ class ServiceBase {
33
45
  entity: entityEvents
34
46
  };
35
47
  this.resourceapi = resourceapi;
48
+ this.resourceapi.logger = logger;
36
49
  this.isEventsEnabled = isEventsEnabled;
37
50
  }
38
51
  /**
@@ -43,8 +56,13 @@ class ServiceBase {
43
56
  */
44
57
  read(call, context) {
45
58
  return __awaiter(this, void 0, void 0, function* () {
59
+ let docs = {};
46
60
  if (!_.isEmpty(call.request.search)) {
47
- throw new errors.Unimplemented('Full-text search is not implemented');
61
+ docs.operation_status = {
62
+ code: 404,
63
+ message: 'Full-text search is not implemented'
64
+ };
65
+ return docs;
48
66
  }
49
67
  try {
50
68
  let objectEntities = [];
@@ -74,12 +92,17 @@ class ServiceBase {
74
92
  }
75
93
  const offset = call.request.offset;
76
94
  let filter = {};
77
- if (!_.isEmpty(call.request.filter)) {
78
- if (call.request.filter.list_value) {
79
- filter = index_1.toObject(call.request.filter, true);
95
+ // convert the filter from proto structure (field, operation, value and operand) to {field: value } mapping
96
+ if (!_.isEmpty(call.request.filters)) {
97
+ if (_.isArray(call.request.filters)) {
98
+ for (let eachFilter of call.request.filters) {
99
+ let prevFilter = filter;
100
+ filter = (0, index_1.toObject)(eachFilter);
101
+ Object.assign(filter, prevFilter);
102
+ }
80
103
  }
81
104
  else {
82
- filter = index_1.toObject(call.request.filter);
105
+ filter = (0, index_1.toObject)(call.request.filters);
83
106
  }
84
107
  }
85
108
  const field = {};
@@ -93,22 +116,130 @@ class ServiceBase {
93
116
  const customQueries = call.request.custom_queries;
94
117
  const customArgs = call.request.custom_arguments || {};
95
118
  objectEntities = (yield this.resourceapi.read(filter, limit, offset, sort, field, customQueries, customArgs)) || [];
96
- return {
97
- items: objectEntities,
119
+ let readResponseWithStatus = [];
120
+ for (let object of objectEntities) {
121
+ readResponseWithStatus.push({
122
+ payload: object,
123
+ status: {
124
+ code: 200,
125
+ message: 'success'
126
+ }
127
+ });
128
+ }
129
+ docs = {
130
+ items: readResponseWithStatus,
98
131
  total_count: objectEntities.length,
132
+ operation_status: {
133
+ code: 200,
134
+ message: 'success'
135
+ }
99
136
  };
137
+ return docs;
100
138
  }
101
139
  catch (e) {
102
- const { code, message, details } = e;
140
+ const { code, message } = e;
103
141
  this.logger.error('Error caught while processing read request', { code, message });
104
- if (details) {
105
- throw { code, message: `${message} - ${details}` };
142
+ if (!docs.status) {
143
+ docs.status = {};
144
+ }
145
+ docs.status = {
146
+ id: '',
147
+ code: e.code,
148
+ message: e.details ? e.details : e.message
149
+ };
150
+ return docs;
151
+ }
152
+ });
153
+ }
154
+ generateStatusResponse(responseItems, inputItems, deleteIds) {
155
+ let statusArray = [];
156
+ if (!_.isArray(responseItems)) {
157
+ responseItems = [responseItems];
158
+ }
159
+ if (!_.isArray(inputItems)) {
160
+ inputItems = [inputItems];
161
+ }
162
+ for (let i = 0; i < responseItems.length; i++) {
163
+ const item = responseItems[i];
164
+ if (item.error) {
165
+ let code;
166
+ let id;
167
+ if (!deleteIds) {
168
+ id = inputItems[i].id;
169
+ }
170
+ else {
171
+ id = inputItems[i]; // for delete operation ids is a string and not object
172
+ }
173
+ // map arango error code to http error code
174
+ arangoHttpErrCodeMap.forEach((value, key) => {
175
+ if (key === item.errorNum) {
176
+ code = value;
177
+ }
178
+ });
179
+ statusArray.push({
180
+ id,
181
+ code: code ? code : item.errorNum,
182
+ message: item.errorMessage
183
+ });
184
+ }
185
+ else {
186
+ statusArray.push({
187
+ id: item.id,
188
+ code: 200,
189
+ message: 'success'
190
+ });
191
+ }
192
+ }
193
+ return statusArray;
194
+ }
195
+ generateResponseWithStatus(responseItems, inputItems, deleteIds) {
196
+ let statusArray = [];
197
+ let responseItemsWithStatus = [];
198
+ if (!_.isArray(responseItems)) {
199
+ responseItems = [responseItems];
200
+ }
201
+ if (!_.isArray(inputItems)) {
202
+ inputItems = [inputItems];
203
+ }
204
+ for (let i = 0; i < responseItems.length; i++) {
205
+ const item = responseItems[i];
206
+ if (item.error) {
207
+ let code;
208
+ let id;
209
+ if (!deleteIds) {
210
+ id = inputItems[i].id;
106
211
  }
107
212
  else {
108
- throw { code, message };
213
+ id = inputItems[i]; // for delete operation ids is a string and not object
109
214
  }
215
+ // map arango error code to http error code
216
+ arangoHttpErrCodeMap.forEach((value, key) => {
217
+ if (key === item.errorNum) {
218
+ code = value;
219
+ }
220
+ });
221
+ responseItemsWithStatus.push({
222
+ payload: undefined,
223
+ status: {
224
+ id,
225
+ code: code ? code : item.errorNum,
226
+ message: item.errorMessage
227
+ }
228
+ });
229
+ statusArray.push();
110
230
  }
111
- });
231
+ else {
232
+ responseItemsWithStatus.push({
233
+ payload: item,
234
+ status: {
235
+ id: item.id,
236
+ code: 200,
237
+ message: 'success'
238
+ }
239
+ });
240
+ }
241
+ }
242
+ return responseItemsWithStatus;
112
243
  }
113
244
  /**
114
245
  * Endpoint create.
@@ -118,28 +249,37 @@ class ServiceBase {
118
249
  */
119
250
  create(call, context) {
120
251
  return __awaiter(this, void 0, void 0, function* () {
252
+ let docs = {};
121
253
  try {
122
- yield this.resourceapi.create(call.request.items);
254
+ const createDocs = _.cloneDeep(call.request.items);
255
+ let createResponse = yield this.resourceapi.create(createDocs);
123
256
  const dispatch = [];
124
257
  const events = this.events.entity;
125
- this.logger.info(this.name + ' created', { items: call.request.items });
126
258
  if (this.isEventsEnabled) {
127
- _.forEach(call.request.items, (item) => {
128
- dispatch.push(events.emit(`${this.name}Created`, item));
259
+ _.forEach(createResponse, (item) => {
260
+ if (!item.error) {
261
+ dispatch.push(events.emit(`${this.name}Created`, item));
262
+ }
129
263
  });
130
264
  yield dispatch;
131
265
  }
132
- return { items: call.request.items, total_count: call.request.items.length, };
266
+ let createResponseWithStatus = this.generateResponseWithStatus(createResponse, createDocs);
267
+ const operation_status = {
268
+ code: 200,
269
+ message: 'success'
270
+ };
271
+ docs = { items: createResponseWithStatus, total_count: createResponseWithStatus.length, operation_status };
272
+ this.logger.info(this.name + ' create response', docs);
273
+ return docs;
133
274
  }
134
275
  catch (e) {
135
- const { code, message, details } = e;
276
+ const { code, message } = e;
136
277
  this.logger.error('Error caught while processing create request', { code, message });
137
- if (details) {
138
- throw { code, message: `${message} - ${details}` };
139
- }
140
- else {
141
- throw { code, message };
142
- }
278
+ docs.operation_status = {
279
+ code: e.code,
280
+ message: e.details ? e.details : e.message
281
+ };
282
+ return docs;
143
283
  }
144
284
  });
145
285
  }
@@ -151,6 +291,7 @@ class ServiceBase {
151
291
  */
152
292
  delete(call, context) {
153
293
  return __awaiter(this, void 0, void 0, function* () {
294
+ let deleteResponse = { status: [], operation_status: {} };
154
295
  try {
155
296
  const events = this.events.entity;
156
297
  let docs;
@@ -159,8 +300,17 @@ class ServiceBase {
159
300
  this.logger.info(`${this.name} deleted`);
160
301
  }
161
302
  else {
162
- yield this.resourceapi.delete(call.request.ids);
163
- docs = call.request.ids;
303
+ docs = yield this.resourceapi.delete(call.request.ids);
304
+ }
305
+ // sanitize delete response for docs
306
+ for (let doc of docs) {
307
+ if (doc._id && doc._key && doc._rev) {
308
+ delete doc._id;
309
+ const id = doc._key;
310
+ doc.id = id;
311
+ delete doc._key;
312
+ delete doc._rev;
313
+ }
164
314
  }
165
315
  if (this.isEventsEnabled) {
166
316
  const dispatch = [];
@@ -168,21 +318,35 @@ class ServiceBase {
168
318
  if (typeof id == 'string') {
169
319
  id = { id };
170
320
  }
171
- dispatch.push(events.emit(`${this.name}Deleted`, id));
321
+ if (!id.error) {
322
+ dispatch.push(events.emit(`${this.name}Deleted`, id));
323
+ }
172
324
  });
173
325
  yield dispatch;
174
326
  }
175
- return {};
327
+ // if complete collection is dropped then there are no input ids provided,
328
+ // iterate docs and put ids to call.request.ids
329
+ if (call.request.collection && (_.isNil(call.request.ids) || _.isEmpty(call.request.ids))) {
330
+ call.request.ids = [];
331
+ for (let doc of docs) {
332
+ call.request.ids.push(doc.id);
333
+ }
334
+ }
335
+ let statusArray = this.generateStatusResponse(docs, call.request.ids, true);
336
+ const operation_status = {
337
+ code: 200,
338
+ message: 'success'
339
+ };
340
+ return { status: statusArray, operation_status };
176
341
  }
177
342
  catch (e) {
178
- const { code, message, details } = e;
343
+ const { code, message } = e;
179
344
  this.logger.error('Error caught while processing delete request', { code, message });
180
- if (details) {
181
- throw { code, message: `${message} - ${details}` };
182
- }
183
- else {
184
- throw { code, message };
185
- }
345
+ deleteResponse.operation_status = {
346
+ code: e.code,
347
+ message: e.details ? e.details : e.message
348
+ };
349
+ return deleteResponse;
186
350
  }
187
351
  });
188
352
  }
@@ -194,28 +358,37 @@ class ServiceBase {
194
358
  */
195
359
  update(call, context) {
196
360
  return __awaiter(this, void 0, void 0, function* () {
361
+ let docs = {};
197
362
  try {
198
- const updateResult = yield this.resourceapi.update(call.request.items);
199
- this.logger.info(this.name + ' updated', { items: updateResult });
363
+ let updateDocs = _.cloneDeep(call.request.items);
364
+ let updateResponse = yield this.resourceapi.update(updateDocs);
200
365
  if (this.isEventsEnabled) {
201
366
  const dispatch = [];
202
367
  const events = this.events.entity;
203
- _.forEach(updateResult, (update) => {
204
- dispatch.push(events.emit(`${this.name}Modified`, update));
368
+ _.forEach(updateResponse, (update) => {
369
+ if (!update.error) {
370
+ dispatch.push(events.emit(`${this.name}Modified`, update));
371
+ }
205
372
  });
206
373
  yield dispatch;
207
374
  }
208
- return { items: updateResult, total_count: updateResult.length };
375
+ let responseWithStatus = this.generateResponseWithStatus(updateResponse, updateDocs);
376
+ const operation_status = {
377
+ code: 200,
378
+ message: 'success'
379
+ };
380
+ docs = { items: responseWithStatus, total_count: responseWithStatus.length, operation_status };
381
+ this.logger.info(this.name + ' update response', docs);
382
+ return docs;
209
383
  }
210
384
  catch (e) {
211
- const { code, message, details } = e;
385
+ const { code, message } = e;
212
386
  this.logger.error('Error caught while processing update request', { code, message });
213
- if (details) {
214
- throw { code, message: `${message} - ${details}` };
215
- }
216
- else {
217
- throw { code, message };
218
- }
387
+ docs.operation_status = {
388
+ code: e.code,
389
+ message: e.details ? e.details : e.message
390
+ };
391
+ return docs;
219
392
  }
220
393
  });
221
394
  }
@@ -227,22 +400,30 @@ class ServiceBase {
227
400
  */
228
401
  upsert(call, context) {
229
402
  return __awaiter(this, void 0, void 0, function* () {
403
+ let docs = {};
230
404
  try {
231
- const result = yield this.resourceapi.upsert(call.request.items, this.events.entity, this.name);
232
- this.logger.info(`${this.name} upserted`, { items: result });
233
- return { items: result, total_count: result.length };
405
+ let upsertDocs = _.cloneDeep(call.request.items);
406
+ let upsertResponse = yield this.resourceapi.upsert(upsertDocs, this.events.entity, this.name);
407
+ let responseWithStatus = this.generateResponseWithStatus(upsertResponse, upsertDocs);
408
+ const operation_status = {
409
+ code: 200,
410
+ message: 'success'
411
+ };
412
+ docs = { items: responseWithStatus, total_count: responseWithStatus.length, operation_status };
413
+ this.logger.info(`${this.name} upsert response`, { items: upsertResponse });
414
+ return docs;
234
415
  }
235
416
  catch (e) {
236
- const { code, message, details } = e;
417
+ const { code, message } = e;
237
418
  this.logger.error('Error caught while processing upsert request', { code, message });
238
- if (details) {
239
- throw { code, message: `${message} - ${details}` };
240
- }
241
- else {
242
- throw { code, message };
243
- }
419
+ docs.operation_status = {
420
+ code: e.code,
421
+ message: e.details ? e.details : e.message
422
+ };
423
+ return docs;
244
424
  }
245
425
  });
246
426
  }
247
427
  }
248
428
  exports.ServiceBase = ServiceBase;
429
+ //# sourceMappingURL=ServiceBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceBase.js","sourceRoot":"","sources":["../../src/core/ServiceBase.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,39 @@ export interface ServiceCall<TRequest> {
3
3
  request: TRequest;
4
4
  }
5
5
  export declare type SortType = 'ASCENDING' | 'DESCENDING' | 'UNSORTED' | 2 | 1 | 0;
6
+ export declare enum FilterOperation {
7
+ eq = 0,
8
+ lt = 1,
9
+ lte = 2,
10
+ gt = 3,
11
+ gte = 4,
12
+ isEmpty = 5,
13
+ iLike = 6,
14
+ in = 7,
15
+ neq = 8
16
+ }
17
+ export declare enum FilterValueType {
18
+ STRING = 0,
19
+ NUMBER = 1,
20
+ BOOLEAN = 2,
21
+ DATE = 3,
22
+ ARRAY = 4
23
+ }
24
+ export declare enum OperatorType {
25
+ and = 0,
26
+ or = 1
27
+ }
28
+ export interface Filter {
29
+ field: string;
30
+ operation: FilterOperation;
31
+ value: string;
32
+ type?: FilterValueType;
33
+ filters?: FilterOp[];
34
+ }
35
+ export interface FilterOp {
36
+ filter?: Filter[];
37
+ operator?: OperatorType;
38
+ }
6
39
  export interface ReadRequest {
7
40
  search?: string;
8
41
  sort?: {
@@ -15,7 +48,7 @@ export interface ReadRequest {
15
48
  name: string;
16
49
  include: boolean;
17
50
  }[];
18
- filter?: any;
51
+ filters?: FilterOp[];
19
52
  custom_queries?: string[];
20
53
  custom_arguments?: any;
21
54
  }
@@ -1,2 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperatorType = exports.FilterValueType = exports.FilterOperation = void 0;
4
+ var FilterOperation;
5
+ (function (FilterOperation) {
6
+ FilterOperation[FilterOperation["eq"] = 0] = "eq";
7
+ FilterOperation[FilterOperation["lt"] = 1] = "lt";
8
+ FilterOperation[FilterOperation["lte"] = 2] = "lte";
9
+ FilterOperation[FilterOperation["gt"] = 3] = "gt";
10
+ FilterOperation[FilterOperation["gte"] = 4] = "gte";
11
+ FilterOperation[FilterOperation["isEmpty"] = 5] = "isEmpty";
12
+ FilterOperation[FilterOperation["iLike"] = 6] = "iLike";
13
+ FilterOperation[FilterOperation["in"] = 7] = "in";
14
+ FilterOperation[FilterOperation["neq"] = 8] = "neq";
15
+ })(FilterOperation = exports.FilterOperation || (exports.FilterOperation = {}));
16
+ ;
17
+ var FilterValueType;
18
+ (function (FilterValueType) {
19
+ FilterValueType[FilterValueType["STRING"] = 0] = "STRING";
20
+ FilterValueType[FilterValueType["NUMBER"] = 1] = "NUMBER";
21
+ FilterValueType[FilterValueType["BOOLEAN"] = 2] = "BOOLEAN";
22
+ FilterValueType[FilterValueType["DATE"] = 3] = "DATE";
23
+ FilterValueType[FilterValueType["ARRAY"] = 4] = "ARRAY";
24
+ })(FilterValueType = exports.FilterValueType || (exports.FilterValueType = {}));
25
+ ;
26
+ var OperatorType;
27
+ (function (OperatorType) {
28
+ OperatorType[OperatorType["and"] = 0] = "and";
29
+ OperatorType[OperatorType["or"] = 1] = "or";
30
+ })(OperatorType = exports.OperatorType || (exports.OperatorType = {}));
31
+ ;
32
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":";;;AAOA,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,iDAAM,CAAA;IACN,iDAAM,CAAA;IACN,mDAAO,CAAA;IACP,iDAAM,CAAA;IACN,mDAAO,CAAA;IACP,2DAAW,CAAA;IACX,uDAAS,CAAA;IACT,iDAAM,CAAA;IACN,mDAAO,CAAA;AACT,CAAC,EAVW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAU1B;AAAA,CAAC;AAEF,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,yDAAU,CAAA;IACV,yDAAU,CAAA;IACV,2DAAW,CAAA;IACX,qDAAQ,CAAA;IACR,uDAAS,CAAA;AACX,CAAC,EANW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAM1B;AAAA,CAAC;AAEF,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6CAAO,CAAA;IACP,2CAAM,CAAA;AACR,CAAC,EAHW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAGvB;AAAA,CAAC"}
package/lib/index.d.ts CHANGED
@@ -1,8 +1,15 @@
1
- export declare const toStruct: (obj: any, fromArray?: Boolean) => any;
2
- export declare const toObject: (struct: any, fromArray?: any) => Object;
1
+ /**
2
+ * toObject takes input contained in the proto structure defined in resource_base proto
3
+ * and converts it into Object understandable by the underlying DB implementation in chassis-srv
4
+ * @param {*} input Original filter input object
5
+ * @param {*} obj converted filter objected passed recursively
6
+ * @param {*} operatorList operatorlist updated and passed recursively
7
+ */
8
+ export declare const toObject: (input: any, obj?: any, operatorList?: string[]) => any;
3
9
  import { ResourcesAPIBase } from './core/ResourcesAPI';
4
10
  export { ResourcesAPIBase };
5
11
  import { ServiceBase } from './core/ServiceBase';
6
12
  export { ServiceBase };
7
13
  import { GraphResourcesServiceBase } from './core/GraphResourcesServiceBase';
8
14
  export { GraphResourcesServiceBase };
15
+ export { Filter, FilterOp, FilterOperation, FilterValueType, OperatorType } from './core/interfaces';