3.0.0 • Published 10 months ago

@janiscommerce/account-process v3.0.0

Weekly downloads
6
License
ISC
Repository
github
Last release
10 months ago

Account Process

Build Status Coverage Status npm version

Creates or Updates a Process of Janis Commerce Service Account

:arrow_down: Installation

npm install @janiscommerce/account-process

:new: Changes from v3.0.0

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

:new: 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.

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"
        }
    }
}

Previous response

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

Current response

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

:wrench: Configuration

:warning: 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.

:x: Wrong:

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

:heavy_check_mark: Good:

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

const accountProcess = session.getSessionInstance(AccountProcess);

:calling: 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

:spades: Statuses

You can get the valid Statuses using:

  • statuses
    • static getter
    • Returns: Object
      • pending
      • processing
      • success
      • error
StatusUsing packageView in Commerce Service
pendingAccountProcess.statuses.pendingaccount-process-status-pending
processingAccountProcess.statuses.processingaccount-process-status-processing
successAccountProcess.statuses.successaccount-process-status-success
errorAccountProcess.statuses.erroraccount-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

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

:arrow_forward: 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 }
        }
    }
}

*/

:x: 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:

CodeDescription
1No Session
2Invalid Account Id
3Invalid Process Name
4Invalid Status
5Invalid Content
6Invalid Options
3.0.0

10 months ago

2.0.2

1 year ago

2.0.1

2 years ago

2.0.0

2 years ago

1.0.0

3 years ago