Skip to content

Commit

Permalink
Merge 206bc13 into 0171e1c
Browse files Browse the repository at this point in the history
  • Loading branch information
deveplon committed Aug 14, 2019
2 parents 0171e1c + 206bc13 commit 70b647e
Show file tree
Hide file tree
Showing 12 changed files with 1,825 additions and 1,188 deletions.
1 change: 1 addition & 0 deletions .eslintignore
@@ -0,0 +1 @@
node_modules
3 changes: 2 additions & 1 deletion .eslintrc.js
Expand Up @@ -117,6 +117,7 @@ module.exports = {
ObjectExpression: { minProperties: 5, multiline: true, consistent: true },
ObjectPattern: { minProperties: 5, multiline: true, consistent: true }
}],
'nonblock-statement-body-position': ['error', 'below', { overrides: { else: 'any' } }]
'nonblock-statement-body-position': ['error', 'below', { overrides: { else: 'any' } }],
strict: ['error', 'global']
}
};
87 changes: 86 additions & 1 deletion README.md
Expand Up @@ -3,18 +3,103 @@
[![Build Status](https://travis-ci.org/janis-commerce/event-parser.svg?branch=master)](https://travis-ci.org/janis-commerce/event-parser)
[![Coverage Status](https://coveralls.io/repos/github/janis-commerce/event-parser/badge.svg?branch=master)](https://coveralls.io/github/janis-commerce/event-parser?branch=master)

A package for parse the events and get the subscribers

## Installation

```sh
npm install @janiscommerce/event-parser
```

## API
## Settings

This package use the [Settings](https://www.npmjs.com/package/@janiscommerce/settings) package for handle settings.

The setting key is `events` and the available settings are the following

| Setting | Default Value | Description |
| ----------- | ------------- | -------------------------------------- |
| databaseKey | \_default | The database key from DB configuration |
| table | events | The events table name |

Example: .janiscommerce.json settings

```javascript
{
"events" : {
"databaseKey": "your-database-name",
"table": "your-table/collection-name"
}
}

```

## Usage

```js
const EventParser = require('@janiscommerce/event-parser');

const actions = await EventParser.getSubscribers(message);
```

## Subscribe Events

Insert into the events table in database declared on your settings

```javascript
{
"client" : "core",
"entity" : "order",
"event" : "create",
"subscribers" : [
"your subscribers"
...
]
}

```

_The expected subscribers are endpoints to deliver the event_

## Examples

#### Use without client

```javascript
/**
Expected message:
message = {
entity: 'order',
event: 'create'
}
*/

const EventParser = require('@janiscommerce/event-parser');
const client = await EventParser.getSubscribers(message);

/**
Expected output:
[...subscribers...]
*/
```

#### Use with client

```javascript
/**
Expected message:
message = {
client: 'client-name'
entity: 'order',
event: 'create'
}
*/

const EventParser = require('@janiscommerce/event-parser');
const client = await EventParser.getSubscribers(message);

/**
Expected output:
[...subscribers...]
*/
```
7 changes: 3 additions & 4 deletions lib/event-parser-error.js
@@ -1,13 +1,12 @@
'use strict';

class EventParserError extends Error {

static get codes() {

return {
// your errors here...
INVALID_DATA: 1,
NOT_FOUND: 2,
INTERNAL_ERROR: 3
};

}

constructor(err, code) {
Expand Down
22 changes: 21 additions & 1 deletion lib/event-parser.js
Expand Up @@ -2,10 +2,30 @@

const EventParserError = require('./event-parser-error');

const ModelEvent = require('./model-event');

class EventParser {
/**
* Get the event actions
*
* @param {String} message object
* @return {Array} Event actions
* @throw EventParserError
*/
static async getSubscribers(message) {
if(!message || typeof message !== 'object' || Array.isArray(message))
throw new EventParserError('Message is required and must be an object', EventParserError.codes.INVALID_DATA);

const { client = 'core', entity, event } = message;

if(!entity || !event)
throw new EventParserError('Message entity and event are required', EventParserError.codes.INVALID_DATA);

// package code...
const modelEvent = new ModelEvent();
const { subscribers } = await modelEvent.getEvent(client, entity, event);

return subscribers && Array.isArray(subscribers) ? subscribers : [];
}
}

module.exports = EventParser;
4 changes: 2 additions & 2 deletions lib/index.js
@@ -1,9 +1,9 @@
'use strict';

const EventParser = require('./event-parser');
const EventParserError = require('./event-parser-error');
const ModelEvent = require('./model-event');

module.exports = {
EventParser,
EventParserError
ModelEvent
};
18 changes: 18 additions & 0 deletions lib/model-event-error.js
@@ -0,0 +1,18 @@
'use strict';

class ModelEventError extends Error {
static get codes() {
return {
INVALID_DATA: 1
};
}

constructor(err, code) {
super(err);
this.message = err.message || err;
this.code = code;
this.name = 'ModelEventError';
}
}

module.exports = ModelEventError;
79 changes: 79 additions & 0 deletions lib/model-event.js
@@ -0,0 +1,79 @@
'use strict';

const Model = require('@janiscommerce/model');
const Settings = require('@janiscommerce/settings');

const ModelEventError = require('./model-event-error');

class ModelEvent extends Model {
/**
* Get the MS settings
*
* @return {Object} Setting
*/
static get settings() {
return Settings.get('events') || {};
}

/**
* Get Database key
*
* @return {String} Database key to search in settings
*/
get databaseKey() {
return this.constructor.settings.databaseKey || '_default';
}

/**
* Get table name
*
* @return {String} Table/Document name
*/
static get table() {
return this.settings.table || 'events';
}

/**
* Get fields for MySQL query
*
* @return {Object} Fields to include in get
*/
static get fields() {
return {
client: true,
entity: true,
event: true
};
}

/**
* Get event by filters
*
* @param {String} client The client
* @param {String} entity The entity
* @param {String} event The event
*
* @return {Object} The event
*/
async getEvent(client, entity, event) {
if(!entity || !event) {
throw new ModelEventError(
'Entity and event are required and must be strings',
ModelEventError.codes.INVALID_DATA
);
}

const events = await this.get({
filters: {
client,
entity,
event
},
limit: 1
});

return events && Array.isArray(events) && events.length > 0 ? events[0] : {};
}
}

module.exports = ModelEvent;

0 comments on commit 70b647e

Please sign in to comment.