@janiscommerce/account-process
Version:
Creates or Updates a Process of Janis Commerce Service Account
351 lines (268 loc) • 9.37 kB
Markdown
//github.com/janis-commerce/account-process/workflows/Build%20Status/badge.svg)
[](https://coveralls.io/github/janis-commerce/account-process?branch=master)
[](https://www.npmjs.com/package/@janiscommerce/account-process)
Creates or Updates a Process of Janis Commerce Service Account
```sh
npm install @janiscommerce/account-process
```
Using `@janiscommerce/lambda` with version `6.x.y` to use `AWS SDK` in `V3`.
Env variable `JANIS_SERVICE_NAME` is **required** for saving and AccountProcess.
Now the package uses Commerce Lambda function `SaveAccountProcess` instead of old Api.
The response of `send()` has changed cause now we are using [lambda](https://www.npmjs.com/package/@janiscommerce/lambda) instead of [microservice-call](https://www.npmjs.com/package/@janiscommerce/microservice-call).
<details>
<summary>Response 200 Example</summary>
**Previous response**
```json
{
"statusCode": 200,
"body": {
"id": "5dea9fc691240d0008408000",
}
}
```
**Current response**
```json
{
"statusCode": 200,
"payload": {
"code": 200,
"accountProcess": {
"id": "5dea9fc691240d0008408000",
"service": "my-service-name",
"process": "import-readme",
"accountId": "5dea9fc691240d00084083f8",
"status": "pending"
}
}
}
```
</details>
<details>
<summary>Response 404 Example</summary>
**Previous response**
```json
{
"statusCode": 404,
"body": {
"message": "Account not found",
}
}
```
**Current response**
```json
{
"statusCode": 200,
"payload": {
"code": 404,
"errorMessage": "Account not found for ID '5dea9fc691240d0008408000'"
}
}
```
</details>
:warning: This package need to be instance with [API-Session](https://github.com/janis-commerce/api-session), before use.
**`JANIS_SERVICE_NAME`** (required): The name of the service that will create the AccountProcess.
:x: Wrong:
```js
const { AccountProcess } = require('@janiscommerce/account-process');
const accountProcess = new AccountProcess();
```
:heavy_check_mark: Good:
```js
const { AccountProcess } = require('@janiscommerce/account-process');
const { ApiSession } = require('@janiscommerce/api-session');
const accountProcess = session.getSessionInstance(AccountProcess);
```
* `send(accountId, processName, status, content, options)`
* **Async**
* Description: Update `processName` for `accountId` in Commerce with `status`.
* Parameters:
* `accountId` : *ObjectId* Account ID in Commerce
* `processName` : *String* name of the process
* `status` : *String* new Status for that process
* `content` : *Object*, **OPTIONAL**, Extra Data you want to add for that process, whatever you want to save, for example a message, or an error stack, etc.
* `options` : *Object*, **OPTIONAL**, To add the Start Date or an End Date.
* `dateStart`: *Boolean* `true` or Date *Object*
* `dateEnd`: *Boolean* `true` or Date *Object*
* Returns: *Object*
* `statusCode`: Status code response from the **Commerce** Lambda `SaveAccountProcess`
* `payload`: *Object*
* `code`: *Number*. Status code with the process response
* `accountProcess`: *Object*. The AccountProcess saved in Commerce Service
You can get the valid Statuses using:
* `statuses`
* **static getter**
* Returns: *Object*
* `pending`
* `processing`
* `success`
* `error`
| Status | Using package | View in **Commerce** Service |
|------|-----------------|-----------------------|
| pending | `AccountProcess.statuses.pending` |  |
| processing | `AccountProcess.statuses.processing` |  |
| success | `AccountProcess.statuses.success` |  |
| error | `AccountProcess.statuses.error` |  |
This is used to keep an extra information in Account Process API, like a log.
In the process:
```js
await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.pending,
{ message: 'Start Importing Categories from ' } // CONTENT
);
```
In Commerce:

Now, there are 2 options
* `startDate`: *Boolean* `true` or specific Date `Object`, to add an Date-Now ISO-String, to indicate the start of the process
* `endDate`: *Boolean* `true` or specific Date `Object`, to add an Date-Now ISO-String, to indicate the end of the process
This is use to set in Account-Process API these properties.
In the process:
```js
const accountProcess = this.session.getSessionInstance(AccountProcess);
// Start the process in current date
await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.pending,
null,
{ startDate: true }
);
// Start the process in a specific date
await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.pending,
null,
{ startDate: myStoredStartDate }
);
// Finish the process in current date
await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.success,
null,
{ endDate: true }
);
// Finish the process in specific date
await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.success,
null,
{ endDate: myStoredEndDate }
);
```
* Send with minimal data, and pending status, and create a process in Commerce
```js
const accountProcess = this.session.getSessionInstance(AccountProcess);
const response = await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.pending
)
/*
Response: {
statusCode: 200,
payload: {
code: 200,
accountProcess: {
id: '5dea9fc691240d0008408000', // the id of the AccountProcess created or updated
service: 'my-service-name',
process: 'import-readme',
accountId: '5dea9fc691240d00084083f8',
status: 'pending'
}
}
}
*/
```
* Send with content, and processing status, and Account is not found in Commerce
```js
const accountProcess = this.session.getSessionInstance(AccountProcess);
const response = await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.processing,
{ itemsImported: 10, itemsNotModified: 1 }
);
/*
Response: {
statusCode: 200,
payload: {
code: 404,
errorMessage: 'Account not found for ID \'5dea9fc691240d00084083f8\''
}
}
*/
```
* Send with a Start Date and error status, and Commerce is failing
```js
const accountProcess = this.session.getSessionInstance(AccountProcess);
const response = await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.error,
null // No Content,
{ startDate: true }
);
/*
Response: {
statusCode: 503
}
*/
```
* Send with an End Date, and success status, and update an existing process in Commerce
```js
const accountProcess = this.session.getSessionInstance(AccountProcess);
const response = await accountProcess.send(
'5dea9fc691240d00084083f8',
'import-readme',
AccountProcess.statuses.success,
{ importedCount: 56400 },
{ endDate: true }
);
/*
Response: {
statusCode: 200,
payload: {
code: 200,
accountProcess: {
id: '5dea9fc691240d0008408000',
service: 'my-service-name',
process: 'import-readme',
accountId: '5dea9fc691240d00084083f8',
status: 'success'
endDate: '2022-05-13T13:26:25.414Z',
content: { importedCount: 56400 }
}
}
}
*/
```
The errors are informed with a `AccountProcessError`.
This object has a code that can be useful for a debugging or error handling.
The codes are the following:
| Code | Description |
|------|------------------------|
| 1 | No Session |
| 2 | Invalid Account Id |
| 3 | Invalid Process Name |
| 4 | Invalid Status |
| 5 | Invalid Content |
| 6 | Invalid Options |
![Build Status](https: