@janiscommerce/account-process

3.0.0 • Public • Published

Account Process

Build Status Coverage Status npm version

Creates or Updates a Process of Janis Commerce Service Account

⬇️ Installation

npm install @janiscommerce/account-process

🆕 Changes from v3.0.0

Using @janiscommerce/lambda with version 6.x.y to use AWS SDK in V3.

🆕 Changes from v2.0.0

service field

Env variable JANIS_SERVICE_NAME is required for saving and AccountProcess.

Using Lambda instead of Api

Now the package uses Commerce Lambda function SaveAccountProcess instead of old Api.

Response

The response of send() has changed cause now we are using lambda instead of microservice-call.

Response 200 Example

Previous response

{
    "statusCode": 200,
    "body": {
        "id": "5dea9fc691240d0008408000",
    }
}

Current response

{
    "statusCode": 200,
    "payload": {
        "code": 200,
        "accountProcess": {
            "id": "5dea9fc691240d0008408000",
            "service": "my-service-name",
            "process": "import-readme",
            "accountId": "5dea9fc691240d00084083f8",
            "status": "pending"
        }
    }
}
Response 404 Example

Previous response

{
    "statusCode": 404,
    "body": {
        "message": "Account not found",
    }
}

Current response

{
    "statusCode": 200,
    "payload": {
        "code": 404,
        "errorMessage": "Account not found for ID '5dea9fc691240d0008408000'"
    }
}

🔧 Configuration

⚠️ This package need to be instance with API-Session, before use.

JANIS_SERVICE_NAME (required): The name of the service that will create the AccountProcess.

Wrong:

const { AccountProcess } = require('@janiscommerce/account-process');
const accountProcess = new AccountProcess();

✔️ Good:

const { AccountProcess } = require('@janiscommerce/account-process');
const { ApiSession } = require('@janiscommerce/api-session');

const accountProcess = session.getSessionInstance(AccountProcess);

📲 API

  • 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

♠️ Statuses

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 account-process-status-pending
processing AccountProcess.statuses.processing account-process-status-processing
success AccountProcess.statuses.success account-process-status-success
error AccountProcess.statuses.error account-process-status-error

Content

This is used to keep an extra information in Account Process API, like a log.

In the process:

await accountProcess.send(
    '5dea9fc691240d00084083f8',
    'import-readme',
    AccountProcess.statuses.pending,
    { message: 'Start Importing Categories from ' } // CONTENT
);

In Commerce:

account-process-content

🕐 Options

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:

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 }
);

▶️ Usage

  • Send with minimal data, and pending status, and create a process in Commerce
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
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
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
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 }
        }
    }
}

*/

Errors

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

Readme

Keywords

Package Sidebar

Install

npm i @janiscommerce/account-process

Weekly Downloads

29

Version

3.0.0

License

ISC

Unpacked Size

15.3 kB

Total Files

7

Last publish

Collaborators

  • janiscommerce