Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: release #226

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
683 changes: 317 additions & 366 deletions package-lock.json

Large diffs are not rendered by default.

7 changes: 3 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,10 @@
"dependencies": {
"@restorecommerce/chassis-srv": "^1.6.2",
"@restorecommerce/grpc-client": "^2.2.4",
"@restorecommerce/kafka-client": "^1.2.10",
"@restorecommerce/rc-grpc-clients": "^5.1.32",
"@restorecommerce/kafka-client": "^1.2.14",
"@restorecommerce/rc-grpc-clients": "^5.1.36",
"@restorecommerce/service-config": "^1.0.15",
"lodash": "^4.17.21",
"nice-grpc": "^2.1.9",
"redis": "^4.6.14"
},
"overrides": {
Expand Down Expand Up @@ -54,7 +53,7 @@
"test": "npm run lint && nyc npm run mocha",
"pretest": "npm run build",
"tsctests": "tsc -d -p tsconfig.test.json",
"lint": "eslint 'src/**/*.ts' ",
"lint": "eslint 'src/**/*.ts' --fix",
"mocha": "cross-env NODE_ENV=test; mocha --full-trace --exit --trace-warnings;",
"test-debug": "npm run lint && npm run mocha-debug",
"mocha-debug": "cross-env NODE_ENV=test; mocha --full-trace --inspect-brk",
Expand Down
4 changes: 1 addition & 3 deletions src/core/GraphResourcesServiceBase.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import * as _ from 'lodash';
import { GraphDatabaseProvider, TraversalResponse as DBTraversalResponse } from '@restorecommerce/chassis-srv';
import { createLogger } from '@restorecommerce/logger';
import { Logger } from 'winston';
import { Stream } from 'stream';
import { Logger, createLogger } from '@restorecommerce/logger';
import {
DeepPartial, ServerStreamingMethodResult,
GraphServiceImplementation,
Expand Down
86 changes: 51 additions & 35 deletions src/core/ResourcesAPI.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as _ from 'lodash';
import { errors } from '@restorecommerce/chassis-srv';
import { Logger } from '@restorecommerce/logger';
import * as uuid from 'uuid';
import { Topic } from '@restorecommerce/kafka-client';
import { BaseDocument, DocumentMetadata } from './interfaces';
Expand Down Expand Up @@ -73,11 +74,10 @@ const setDefaults = async (obj: { meta?: DocumentMetadata;[key: string]: any },

const updateMetadata = (docMeta: DocumentMetadata, newDoc: BaseDocument, subject: Subject): BaseDocument => {
if (_.isEmpty(newDoc.meta)) {
// docMeta.owner = newDoc.owner;
throw new errors.InvalidArgument(`Update request holds no valid metadata for document ${newDoc.id}`);
}

if (!_.isEmpty(newDoc.meta.owners)) {
if (!_.isEmpty(newDoc.meta?.owners)) {
// if ownership is meant to be updated
docMeta.owners = newDoc.meta.owners;
}
Expand All @@ -93,19 +93,24 @@ const updateMetadata = (docMeta: DocumentMetadata, newDoc: BaseDocument, subject
* Resource API base provides functions for CRUD operations.
*/
export class ResourcesAPIBase {
bufferFields: string[];
requiredFields: any;
timeStampFields: string[];
resourceName: string;
logger: any;
public readonly bufferFields: string[];
public readonly requiredFields: any;
public readonly timeStampFields: string[];
public readonly resourceName: string;
/**
* @constructor
* @param {object} db Chassis arangodb provider.
* @param {string} collectionName Name of database collection.
* @param {any} fieldHandlerConf The collection's field generators configuration.
*/
constructor(private db: DatabaseProvider, private collectionName: string, fieldHandlerConf?: any,
private edgeCfg?: any, private graphName?: string, logger?: any) {
constructor(
public readonly db: DatabaseProvider,
public readonly collectionName: string,
fieldHandlerConf?: any,
public readonly edgeCfg?: any,
public readonly graphName?: string,
public readonly logger?: Logger
) {
this.resourceName = collectionName.substring(0, collectionName.length - 1);

if (!fieldHandlerConf) {
Expand Down Expand Up @@ -166,8 +171,16 @@ export class ResourcesAPIBase {
* @param {object} field key value, key=field value: 0=exclude, 1=include
* @returns {an Object that contains an items field}
*/
async read(filter: Object = {}, limit = 1000, offset = 0,
sort: any = {}, field: any = {}, customQueries: string[] = [], customArgs: any = {}, search: DeepPartial<Search>): Promise<BaseDocument[]> {
async read(
filter: Object = {},
limit = 1000,
offset = 0,
sort: any = {},
field: any = {},
customQueries: string[] = [],
customArgs: any = {},
search: DeepPartial<Search>
): Promise<BaseDocument[]> {
const options = {
limit: Math.min(limit, 1000),
offset,
Expand Down Expand Up @@ -278,12 +291,12 @@ export class ResourcesAPIBase {
}
return result;
}
} catch (e) {
this.logger.error('Error creating documents', { code: e.code, message: e.message, stack: e.stack });
} catch (error) {
this.logger?.error('Error creating documents', { code: error?.code, message: error?.message, stack: error?.stack });
result.push({
error: true,
errorNum: e.code,
errorMessage: e.details ? e.details : e.message
errorNum: error?.code,
errorMessage: error?.details ? error?.details : error?.message
});
return result;
}
Expand Down Expand Up @@ -347,12 +360,12 @@ export class ResourcesAPIBase {
deleteResponse = await this.db.delete(this.collectionName, ids);
return deleteResponse;
}
catch (err) {
this.logger.error('Error deleting documents', { code: err.code, message: err.message, stack: err.stack });
catch (error) {
this.logger?.error('Error deleting documents', { code: error?.code, message: error?.message, stack: error?.stack });
deleteResponse.push({
error: true,
errorNum: err.code,
errorMessage: err.details ? err.details : err.message
errorNum: error?.code,
errorMessage: error?.details ? error?.details : error?.message
});
return deleteResponse;
}
Expand Down Expand Up @@ -395,11 +408,10 @@ export class ResourcesAPIBase {
try {
let createDocuments = [];
let updateDocuments = [];
let dispatch = [];
dispatch = await Promise.all(documents.map(async (doc) => {
if (this.bufferFields && doc) {
doc = this.encodeOrDecode([doc], this.bufferFields, 'decode')[0];
}
if (this.bufferFields && documents) {
documents = this.encodeOrDecode(documents, this.bufferFields, 'decode');
}
const dispatch = await Promise.all(documents.map(async (doc) => {
let foundDocs;
if (doc && doc.id) {
foundDocs = await this.db.find(this.collectionName, { id: doc.id }, {
Expand Down Expand Up @@ -452,11 +464,11 @@ export class ResourcesAPIBase {

return result;
} catch (error) {
this.logger.error('Error upserting documents', { code: error.code, message: error.message, stack: error.stack });
this.logger?.error('Error upserting documents', { code: error?.code, message: error?.message, stack: error?.stack });
result.push({
error: true,
errorNum: error.code,
errorMessage: error.details ? error.details : error.message
errorNum: error?.code,
errorMessage: error?.details ? error?.details : error?.message
});
return result;
}
Expand All @@ -472,11 +484,15 @@ export class ResourcesAPIBase {
let updateResponse = [];
try {
const collectionName = this.collectionName;
if (this.bufferFields && documents) {
documents = this.encodeOrDecode(documents, this.bufferFields, 'decode');
}
let docsWithUpMetadata = await Promise.all(documents.map(async (doc) => {
if (this.bufferFields && doc) {
doc = this.encodeOrDecode([_.cloneDeep(doc)], this.bufferFields, 'decode')[0];
}
let foundDocs = await this.db.find(collectionName, { id: doc.id });
let foundDocs = await this.db.find(
collectionName,
{ id: doc.id },
{ limit: 1 }
);
let dbDoc;
if (foundDocs && foundDocs.length === 1) {
dbDoc = foundDocs[0];
Expand Down Expand Up @@ -546,12 +562,12 @@ export class ResourcesAPIBase {
updateResponse = this.encodeOrDecode(updateResponse, this.bufferFields, 'encode');
}
return updateResponse;
} catch (e) {
this.logger.error('Error updating documents', { code: e.code, message: e.message, stack: e.stack });
} catch (error) {
this.logger?.error('Error updating documents', { code: error?.code, message: error?.message, stack: error?.stack });
updateResponse.push({
error: true,
errorNum: e.code,
errorMessage: e.message
errorNum: error?.code,
errorMessage: error?.message
});
return updateResponse;
}
Expand Down
15 changes: 7 additions & 8 deletions src/core/ServiceBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as _ from 'lodash';
import { toObject } from '../index';
import { ResourcesAPIBase } from './ResourcesAPI';
import { Topic } from '@restorecommerce/kafka-client';
import { Logger } from 'winston';
import { Logger } from '@restorecommerce/logger';
import {
DeepPartial,
DeleteRequest,
Expand Down Expand Up @@ -104,8 +104,7 @@ export class ServiceBase<T extends ResourceListResponse, M extends ResourceList>
search
)) || [];

let readResponseWithStatus = [];
objectEntities.map((object) => readResponseWithStatus.push({
const readResponseWithStatus = objectEntities.map((object) => ({
payload: object,
status: {
code: 200,
Expand All @@ -115,7 +114,7 @@ export class ServiceBase<T extends ResourceListResponse, M extends ResourceList>

return {
items: readResponseWithStatus,
total_count: objectEntities.length,
total_count: readResponseWithStatus.length,
operation_status: {
code: 200,
message: 'success'
Expand Down Expand Up @@ -178,10 +177,10 @@ export class ServiceBase<T extends ResourceListResponse, M extends ResourceList>
private generateResponseWithStatus(responseItems: any[], inputItems: any[], deleteIds?: boolean) {
let statusArray = [];
let responseItemsWithStatus = [];
if (!_.isArray(responseItems)) {
responseItems = [responseItems];
if (!Array.isArray(responseItems)) {
responseItems = responseItems ? [responseItems] : [];
}
if (!_.isArray(inputItems)) {
if (!Array.isArray(inputItems)) {
inputItems = [inputItems];
}
for (let i = 0; i < responseItems.length; i++) {
Expand Down Expand Up @@ -375,7 +374,7 @@ export class ServiceBase<T extends ResourceListResponse, M extends ResourceList>
let upsertDocs = _.cloneDeep(request.items);
let upsertResponse = await this.resourceapi.upsert(
upsertDocs,
this.events,
this.isEventsEnabled && this.events,
this.name,
request.subject
);
Expand Down
8 changes: 4 additions & 4 deletions src/core/WorkerBase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ import {
Topic,
registerProtoMeta
} from '@restorecommerce/kafka-client';
import { Arango } from '@restorecommerce/chassis-srv/lib/database/provider/arango/base.js';
import { Arango } from '@restorecommerce/chassis-srv/lib/database/provider/arango/base';
import { createLogger } from '@restorecommerce/logger';
import { BindConfig } from '@restorecommerce/chassis-srv/lib/microservice/transport/provider/grpc/index.js';
import { BindConfig } from '@restorecommerce/chassis-srv/lib/microservice/transport/provider/grpc/index';
import {
ProtoMetadata,
protoMetadata as CommandInterfaceMeta,
CommandInterfaceServiceDefinition,
} from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/commandinterface.js';
import { HealthDefinition } from '@restorecommerce/rc-grpc-clients/dist/generated-server/grpc/health/v1/health.js';
} from '@restorecommerce/rc-grpc-clients/dist/generated-server/io/restorecommerce/commandinterface';
import { HealthDefinition } from '@restorecommerce/rc-grpc-clients/dist/generated-server/grpc/health/v1/health';
import { ServerReflectionService } from 'nice-grpc-server-reflection';
import { ServiceBase } from './ServiceBase';
import { createServiceConfig } from '@restorecommerce/service-config';
Expand Down
21 changes: 14 additions & 7 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,10 +215,17 @@ export const toObject = (input) => {
return finalObj;
};

import { ResourcesAPIBase } from './core/ResourcesAPI';
export { ResourcesAPIBase };
import { ServiceBase } from './core/ServiceBase';
export { ServiceBase };
import { GraphResourcesServiceBase } from './core/GraphResourcesServiceBase';
export { GraphResourcesServiceBase };
export { Filter, FilterOp, FilterOperation, FilterValueType, OperatorType, TraversalOptions, GraphFilters, GraphFilter } from './core/interfaces';
export { ResourcesAPIBase } from './core/ResourcesAPI';
export { ServiceBase } from './core/ServiceBase';
export { WorkerBase } from './core/WorkerBase';
export { GraphResourcesServiceBase } from './core/GraphResourcesServiceBase';
export {
Filter,
FilterOp,
FilterOperation,
FilterValueType,
GraphFilters,
GraphFilter,
OperatorType,
TraversalOptions,
} from './core/interfaces';
3 changes: 2 additions & 1 deletion test/crud.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

import { ResourcesAPIBase, ServiceBase, toObject, convertToObject } from '../lib';
import * as mocha from 'mocha';
import { ResourcesAPIBase, ServiceBase, toObject, convertToObject } from '../src/index';
import * as chassis from '@restorecommerce/chassis-srv';
import { Channel, createChannel, createClient } from '@restorecommerce/grpc-client';
import { Events, registerProtoMeta, Topic } from '@restorecommerce/kafka-client';
Expand Down
6 changes: 3 additions & 3 deletions test/graph_traversal.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
'use strict';

import * as mocha from 'mocha';
import { GraphResourcesServiceBase } from '../lib';
import { ResourcesAPIBase } from '../lib';
import { ServiceBase } from '../lib';
import { GraphResourcesServiceBase } from '../src/index';
import { ResourcesAPIBase } from '../src/index';
import { ServiceBase } from '../src/index';
import * as chassis from '@restorecommerce/chassis-srv';
import { createClient, createChannel, Channel } from '@restorecommerce/grpc-client';
import { registerProtoMeta } from '@restorecommerce/kafka-client';
Expand Down
Loading