Discount Code Importer
A package that helps with importing commercetools discount codes in JSON format to the commercetools platform. This package is built to be used in conjunction with sphere-node-cli
Configuration
The constructor accepts two arguments:
- A required object containing the following values:
apiConfig
(Object):AuthMiddleware
options for authentication on the commercetools platform. (Required. See here)accessToken
(String): Access token to be used to authenticate requests to API. Requires scope of [manage_orders
]batchSize
(Number): Amount of codes not more than 500 to process concurrently (Optional. Default: 50)continueOnProblems
(Boolean): Flag whether to continue processing if an error occurs (Optional. Default: false)
- An optional logger object having four functions (
info
,warn
,error
andverbose
)
Usage with sphere-node-cli
You can use this package from the sphere-node-cli
. In order for the cli to import discount codes, the file to import from must be a valid JSON and follow this structure:
[
{
"name": {
"en": "Sammuy",
"de": "Valerian"
},
"description": {
"en": "some new promo",
"de": "super Angebot"
},
"cartDiscounts": [
{
"typeId": "cart-discount",
"id": "some-cart-discount-id"
}
],
"cartPredicate": "lineItemTotal(1 = 1) > \"10.00 USD\"",
"isActive": true,
"maxApplications": 10,
"maxApplicationsPerCustomer": 2,
"code": "MyDiscountCode1"
},
{
"name": {
"en": "Sammuy",
"de": "Valerian"
},
"description": {
"en": "some new promo",
"de": "super Angebot"
},
"cartDiscounts": [
{
"typeId": "cart-discount",
"id": "some-cart-discount-id"
}
],
"cartPredicate": "lineItemTotal(1 = 1) > \"20.00 USD\"",
"isActive": false,
"maxApplications": 10,
"maxApplicationsPerCustomer": 2,
"code": "MyDiscountCode2"
},
{
"name": {
"en": "Sammuy",
"de": "Valerian"
},
"description": {
"en": "some new promo",
"de": "super Angebot"
},
"cartDiscounts": [
{
"typeId": "cart-discount",
"id": "some-cart-discount-id"
}
],
"cartPredicate": "lineItemTotal(1 = 1) > \"50.00 USD\"",
"isActive": false,
"maxApplications": 10,
"maxApplicationsPerCustomer": 2,
"code": "MyDiscountCode3"
},
...
]
Then you can import this file using the cli:
sphere-node-cli -t discountCode -p my-project-key -f /sample_dir/codes.json
Custom optional configuration can be passed in as described above using the -c
flag
sphere-node-cli -t discountCode -p my-project-key -f /sample_dir/codes.json -b 20 -c '{ "continueOnProblems": true }'
Direct Usage
If you would like to have more control, you can also use this module directly in Javascript. To do this, you need to install it:
npm install @commercetools/discount-code-importer
Then you can use it to import discount codes:
import DiscountCodeImport from '@commercetools/discount-code-importer'
const codes = [
{
name: {
en: 'Sammuy',
de: 'Valerian'
},
description: {
en: 'some new promo',
de: 'super Angebot'
},
cartDiscounts: [
{
typeId: 'cart-discount',
id: 'some-cart-discount-id'
}
],
cartPredicate: 'lineItemTotal(1 = 1) > "10.00 USD"',
isActive: true,
maxApplications: 10,
maxApplicationsPerCustomer: 2,
code: 'MyDiscountCode1'
},
{
name: {
en: 'Sammuy',
de: 'Valerian'
},
description: {
en: 'some new promo',
de: 'super Angebot'
},
cartDiscounts: [
{
typeId: 'cart-discount',
id: 'some-cart-discount-id'
}
],
cartPredicate: 'lineItemTotal(1 = 1) > "20.00 USD"',
isActive: false,
maxApplications: 10,
maxApplicationsPerCustomer: 2,
code: 'MyDiscountCode2'
},
{
name: {
en: 'Sammuy',
de: 'Valerian'
},
description: {
en: 'some new promo',
de: 'super Angebot'
},
cartDiscounts: [
{
typeId: 'cart-discount',
id: 'some-cart-discount-id'
}
],
cartPredicate: 'lineItemTotal(1 = 1) > "50.00 USD"',
isActive: false,
maxApplications: 10,
maxApplicationsPerCustomer: 2,
code: 'MyDiscountCode3'
},
...
]
const options = {
apiConfig: {
host: 'https://auth.commercetools.com'
project_key: <PROJECT_KEY>,
credentials: {
clientId: '*********',
clientSecret: '*********'
}
},
accessToken: '123456yuhgfdwegh675412wefb3rgb',
batchSize: 20,
continueOnProblems: true
}
}
const discountCodeImport = new DiscountCodeImport(options)
discountCodeImport.run(codes)
.then(() => {
discountCodeImport.summaryReport()
// handle successful import
})
.catch((error) => {
// handle error
})
On successful completion, a call to the .summaryReport()
method returns a report in the following format:
{
reportMessage: 'Summary: there were 5 successfully imported discount codes (3 were newly created, 2 were updated and 0 were unchanged).',
detailedSummary: {
created: 3,
updated: 2,
unchanged: 0,
createErrorCount: 0,
updateErrorCount: 0,
errors: []
}
}
Note: By default, if a discount code already exists, the module tries to build update actions for it, and if no update actions can be built, the code will be ignored