Basket API

Basket API #

The basket API is used to add/remove/update items in a basket. It also allows for promotion calculations to be performed against a basket.

The Basket API allows for baskets to be named, and a single customer can have multiple active baskets; this is used to support ‘wishlists’. In this scenario there is one ‘PRIMARY’ basket for the customer, and many ‘WISHLIST’ baskets – these are internally identified by the BasketType on the StoredCustomerBasket entity.

Baskets have a unique reference ID. This is generated from a Class 4 UUID encoded into Base32, as shown by the following code:

public String createReferenceId() {

// First create a UUID

UUID uuid = UUID.randomUUID();

// Convert to binary

ByteBuffer buffer = ByteBuffer.wrap(new byte[16]);

buffer.putLong(uuid.getMostSignificantBits());

buffer.putLong(uuid.getLeastSignificantBits());

byte[] bytes = buffer.array();

// Encode to Base32

String base32Id = Base32.encodeBytes(bytes);

// Strip (trailing) ‘=’ symbols and return

return base32Id.replace(“=”,””);

}

This should result in a 22 character string.

Baskets can be either associated with a customer, or be anonymous. In the latter case, the anonymous customer can only access their stored baskets by retaining the basket reference (for example in a cookie) – if the basket reference is lost, an anonymous basket cannot be retrieved.

Baskets will be stored using the Enactor Basket Store (not the stored transaction service)

Create/Save a Basket #

Service URL: POST /baskets

Request Body:

ICreateBasketRequest

name – String – The name for the new basket – Optional, generated if not supplied

type – String – The type of basket to create – Optional, can be ‘WISHLIST’ or ‘ANONYMOUS’. If not supplied it will default to ‘WISHLIST’

Response Headers:

Location: /baskets/{basketReference}

Remarks:

Creates a new empty basket with the given name. The reference for the new basket is returned in the response headers. If the accessToken contains customer details, the basket will be associated with the customer, otherwise the basket is anonymous.

The type determines what kind of basket to create, can be supplied as ‘WISHLIST’ or ‘ANONYMOUS’. If ‘ANONYMOUS’ is specified the basket will not be associated with any customer present in the id token (if present).

If the name is not supplied, the service will generate one, using a simple incrementing number for the number of wishlists the customer has, or if the customer is anonymous the name will be just set to ‘Wish List’.

Scenarios:

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Create basket service has been given an empty request

Success

Annoymous basket is created and stored as a WISHLIST basket, and with a generated/incremented basket name.

201

Location Header: BasketReference

2

Create basket service has been given a basket name

Success

Annoymous basket is created and stored with the basket name

201

Location Header: BasketReference

3

Create basket service has not given a basket name.

Success

Annoymous basket is created and stored with a generated/incremented basket name.

201

Location Header: BasketReference

4

Create basket service has been given a WISHLIST basket type

Success

Annoymous basket is created and stored as a WISHLIST basket

201

Location Header: BasketReference

5

Create basket service has been given customer details

Success

A customer associated basket is created and stored

201

Location Header: BasketReference

6

Create basket service has been given a PRIMARY basket type

Fail

The process checks and basket type for PRIMARY and should fail.

405

Error Message: Not Allowed to create basket

7

Create Basket Service has recieved a request with a basket name that already exists

AlreadyExists

The basket is not created. An error message of 400 – Bad Request is returned.

400

Error Message: Bad Request. A customer with that name already exists. outcome Already Exists.

8

Create basket service has received a request to create a ANONYMOUS basket

Success

Anonymous basket is create and stored as an ANONYMOUS basket with a generate/incremented basket name (if not supplied)

201

Location Header: BasketReference

Example Request:

Example Create Basket Request

POST: http://localhost:8080/WebRestApi/rest/baskets

Content-Type: application/json

{

“basketType”: “WISHLIST”,

“basketName”: “Xmas Wishlist”

}

Example Response:

Status: 201 created

Location: http://localhost:8080/WebRestApi/rest/baskets/MUCFJAIBTVDK3HHNC444ZALMV4

Replace a Basket #

Service URL: PUT /baskets/{basketReference}

Tokens:

basketReference – The basket reference of the basket to replace the content for, or can be ‘PRIMARY’ to replace the PRIMARY basket.

Request Body:

IReplaceBasketRequest:

basket – IBasket – The content of the new basket – Required

Remarks:

Replaces the content of an existing basket with the supplied content. This is similar to POST /basket but you cannot use it to create a new basket. i.e. the basketReference must already exist. If the basketReference is PRIMARY, the content of the PRIMARY basket is replaced.

Scenarios:

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Replace basket service has received a request without a basket (A required field)

Fail

The service should return an error message of bad request

500

Error Message: Failed to replace basket. Bad Request: Missing data…

2

Replace basket service received a valid basket reference and a request with a basket

Success

The service should replace and save the basket from the request.

200

200 Success ok

3

Replace basket service received a valid PRIMARY basket reference and a request with a basket

Success

The service should replace and save the basket from the request.

200

200 Success ok

Example Request

 Expand source

PUT: http://localhost:8080/WebRestApi/rest/baskets/PRIMARY

{

“basket”: {

“items”: [

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 5995,

“lineNumber”: 1,

“netValue”: 5995,

“value”: 5995,

“dateTimeCreated”: “2019-07-19T15:35:52.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-8”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “8”,

“sizeRangeId”: “MENS_SHOES”

}

}

],

“balance”: 5995,

“currencyId”: “GBP”,

“currencyDescription”: “Pounds Sterling”,

“taxInclusive”: true,

“taxSchemeId”: “UK”,

“itemCount”: 2,

“saleItemQuantity”: 1,

“returnItemQuantity”: 0,

“saleItemNetValue”: 5995,

“returnItemNetValue”: 0,

“merchandiseItemQuantity”: 1,

“merchandiseItemValue”: 5995,

“total”: 5995,

“grossTotal”: 5995,

“taxTotal”: 0,

“totalTaxAdjustment”: 0,

“preAuthBalance”: 0,

“effectiveSaleValue”: 5995

},

“basketReference”: “PRIMARY”,

“basketType”: “PRIMARY”

}

Example Response

Status: 200 OK

Delete a Basket

Service URL: DELETE /baskets/{basketReference}

Tokens:

basketReference – The basket reference of the basket to add the item to, or can be ‘PRIMARY’ to “delete” the PRIMARY basket.

Remarks:

Deletes a basket, identified by the basket reference. If the PRIMARY basket is specified, it is not deleted, but all items are removed from it.

Scenarios:

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Delete basket service has recieved a request with a valid basket reference

Success

The basket should be deleted.

200

200 Success ok

2

Delete basket service has recieved a request with a invalid basket reference

Fail

The basket should not be deleted. An bad request error message should be returned to the user.

400

Error Message: Failed to delete basket. Bad Request

3

Delete basket service has recieved a request with a PRIMARY basket reference

Successs

The basket should not be deleted. All items in the basket should be deleted

200

200 Success ok

Example Request:

DELETE: http://localhost:8080/WebRestApi/rest/baskets/MUCFJAIBTVDK3HHNC444ZALMV4

Example Response:

Status: 200 OK

Get Basket item #

Service URL: GET /baskets/{basketReference}/items/{lineNumber}

Tokens:

basketReference – The basket reference of the basket to add the item to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Response Body:

IBasketItemRetrievalResponse:

basketItem – IBasketItem – The requested basket item

Remarks:

Loads an existing basket and extracts the basket item based on the line number.

Scenarios

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Service recieves a valid basket reference and line number

Success

The item is extracted from the basket and returned.

200

IBasketItemRetrievalResponse: basketItem

2

Serivce recieves a valid basket and invalid line number

NotFound

Basket item with line number provided was not found. Error Message should be returned

400

Error Message: Item could not found for basket reference <basketReference>

3

Serivce recieves a valid basket and invalid line number

NotFound

Basket was not found given the basket reference. Error Message should be returned

400

Error Message: Item could not found for basket reference <basketReference>

Example Request:

Example Get Basket Item Request

GET: http://localhost:8080/WebRestApi/rest/baskets/PRIMARY/items/1

Example Response:

Example Get Basket Item Response  Expand source

{

“basketItem”: {

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 5995,

“lineNumber”: 1,

“netValue”: 5995,

“value”: 5995,

“dateTimeCreated”: “2019-07-19T15:35:52.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-8”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “8”,

“sizeRangeId”: “MENS_SHOES”

}

},

“customerNumber”: “1”

}

Add an Item to a Basket #

Service URL: POST /baskets/{basketReference}/items

Tokens:

basketReference – The basket reference of the basket to add the item to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Request Parameters:

returnBasket – Boolean – If true the updated basket is returned – Defaults to false

Request Body:

IAddBasketItemRequest:

itemType –  String – The type of the item to add to the basket. Currently, supported types are VOUCHER and PRODUCT. Optional, defaults to PRODUCT.

itemId – String – The id of the item to add to the basket. If the type is PRODUCT or empty, the item should be the id of the product. When the type is VOUCHER, the item id should be the vouchers serial number – Required

quantity – Integer – The quantity to add to the basket – Optional, defaults to 1

Response Headers:

Location: /baskets/{basketReference}/items/{lineNumber}

Response Body:

IBasketItemResponse:

basketItemLineNumber – String – the line number of the item added to the basket.

basket – IBasket – The new or updated transaction containing the item being added, if returnBasket is true

basketReference – String – the reference of the basket

basketType – String – the type of the basket

basketDescription – String – the description of the basket

basketResponseCode – String – A specific basket code to indict whether the basket was implicitly created by the server.

basketStatus – String – the status of the basket. Fresh baskets have the status NEW. Baskets in progress have the status of IN_PROGRESS. Baskets will have been submitted to retail processing have the status SUBMITTED.

Remarks:

Adds a new item to a basket. If the PRIMARY basket is specified and it does not currently exist, it will be created. However, if a wishlist basket that does not exists, the service call should fail with a bad request. The lineNumber for the new item is returned in the response header. If the returnBasket the parameter is true, the updated basket and the line number of the new item is returned in the response body.

Scenarios:

Primary Basket Scenarios

All scenarios start with “Basket items service has received a request to add an item to a primary basket”.

Scenario

Outcome

Expected behavior

Status Code

Response

1

 The customer does not currently have a primary basket. Return basket is empty

success

A new primary basket gets created with the item. The basket is not returned

200

200 Success ok

2

 The customer does not currently have a primary basket. Return basket is set to true

success

A new primary basket gets created with the item. The basket is returned

200

IBasketResponse: basket

3

The customer already has a primary basket. Return basket is empty

success

The item should be added to the existing basket. The basket is returned

200

200 Success ok

4

The customer already has a primary basket. Return basket is set to true

success

The item should be added to the existing basket. The basket is not returned

200

IBasketResponse: basket

Wishlist Basket Scenarios

All scenarios start with “Basket items service has received a request to add the item to a wishlist basket”.

Scenario

Outcome

Expected behavior

Status Code

Response

1

The wishlist basket exists, and return basket is empty

success

The item should be added to the existing wishlist basket. The basket is not returned

200

200 Success ok

2

The wishlist basket exists, and return basket is set to true

success

The item should be added to the existing wishlist basket. The basket is returned

200

IBasketResponse: basket

3

The wishlist basket does not exist

BadRequest

The service should return and an error message stating that it can’t add the item to the specified basket.

400

Error Message: Failed to add the item to the basket. Bad Request

Example Request:

 Expand source

POST: http://localhost:8080/WebRestApi/rest/baskets/PRIMARY/items?returnBasket=true

Content-Type: application/json

{

“itemId” : “MB709SN-4”,

“itemType” : “PRODUCT”,

“quantity” : “1”,

“returnBasket” : true

}

Response Body:

 Expand source

Status: 200 OK

{

“basketItemLineNumber”: “3”,

“basketType”: “PRIMARY”,

“basketDescription”: “Primary”,

“basket”: {

“items”: [

{

“@type”: “orderDetailsItem”,

“description”: “Order”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: -9955,

“lineNumber”: 1,

“netValue”: -9955,

“value”: -9955,

“dateTimeCreated”: “2019-08-22T15:01:07.000+01:00”,

“userId”: “CUST_USER”,

“type”: “VALUE”,

“orderReference”: “149”,

“sendCustomerDeliveryNotification”: true,

“customerOrderTypeId”: “CUSTOMER_ORDER”

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 5995,

“lineNumber”: 2,

“netValue”: 5995,

“value”: 5995,

“dateTimeCreated”: “2019-08-22T15:01:18.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-12”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“modifiers”: [

{

“@type”: “orderModifier”,

“modifierItemLine”: 1

}

],

“sizeId”: {

“id”: “12”,

“sizeRangeId”: “MENS_SHOES”

}

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “NAVY_BLUE”,

“colourRangeId”: “WOMENS_DRESSES”

},

“description”: “Rose Print Tea Dress”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 3960,

“lineNumber”: 3,

“netValue”: 4260,

“value”: 4260,

“dateTimeCreated”: “2019-08-29T12:19:35.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: -300,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “MB709SN-4”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 4260,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/MB709SN-2.jpg”,

“type”: “VALUE”,

“mmGroupId”: “WOMENS_DRESSES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Women’s Dresses”,

“brandGroupId”: “INTERNAL”,

“brandGroupHierarchyId”: “FASHION”,

“modifiers”: [

{

“@type”: “orderModifier”,

“modifierItemLine”: 1

},

{

“@type”: “distributedPromotionSavingItem”,

“lineNumber”: 3,

“distributedSaving”: 300,

“promotionKey”: {

“promotionId”: “AmountDiscount”,

“groupKey”: {

“id”: “UK”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“modifierType”: “PROMOTION”,

“modifierItemLine”: 0,

“effectiveValue”: -300

}

],

“sizeId”: {

“id”: “14”,

“sizeRangeId”: “WOMENS_DRESSES”

}

}

],

“balance”: 0,

“currencyId”: “GBP”,

“currencyDescription”: “Pounds Sterling”,

“taxInclusive”: true,

“taxSchemeId”: “UK”,

“itemCount”: 3,

“saleItemQuantity”: 2,

“returnItemQuantity”: 0,

“saleItemNetValue”: 9955,

“returnItemNetValue”: 0,

“merchandiseItemQuantity”: 2,

“merchandiseItemValue”: 10255,

“total”: 0,

“grossTotal”: 300,

“taxTotal”: 0,

“promotionCalculation”: {

“totalSaving”: 300,

“totalPoints”: 0,

“itemsArray”: [

{

“promotionSavingItem”: {

“saving”: 300,

“savingAdjustment”: 0,

“adjustEmployeeBalance”: false,

“promotionDescription”: “£3 off of KAT VON D Eye Liner”,

“promotionQuantity”: 1,

“operationWithDiscounts”: “APPLIES_AFTER_ON_GROSS”,

“promotionKey”: {

“promotionId”: “AmountDiscount”,

“groupKey”: {

“id”: “UK”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“triggers”: [

{

“rewardValue”: 300,

“lineRewardValue”: 300,

“distributeSaving”: true,

“lineNumber”: 3,

“quantity”: 1,

“unitValue”: 4260,

“triggerCount”: 1,

“rewardId”: “1”

}

]

}

}

]

},

“currentModifierLineNumber”: 1,

“totalTaxAdjustment”: 0,

“preAuthBalance”: 0,

“effectiveSaleValue”: 9955

},

“basketResponseCode”: “BASKET_ITEM_ADDED”

}

Remove an Item From a Basket #

Service URL: DELETE /baskets/{basketReference}/items/{lineNumber}

Tokens:

basketReference – The basket reference of the basket to remove the item from. The basket reference can be a basketId or PRIMARY for a primary basket

lineNumber – The line number to remove from the basket

Remarks:

Deletes an existing line number from a basket.

Scenarios

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Service is given a valid lineNumber and basketReference so the item is removed from the basket

success

The basket item is removed.

200

200 Success ok

2

Service is given a invalid lineNumber and a valid basketReference

NotFound

Service returns a bad request

400

Error Message: Item could not be removed from the basket with reference: <BasketReference>

Example Request:

DELETE: http://localhost:8080/WebRestApi/rest/baskets/PRIMARY/items/2

Example Response:

Status: 200 OK

Update an Items Quantity #

Service URL: PATCH /baskets/{basketReference}/items/{lineNumber}/quantity

Tokens:

basketReference – The basket reference of the basket to add the item to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

lineNumber – The line number to update in the basket

Parameters:

IUpdateBasketItemQuantityRequest:

returnBasket – Boolean – If true the updated basket is returned – Defaults to false

Request Body:

quantity – Integer – The new quantity for the line

Response Body:

BasketResponse

basket – IBasket – The basket associated with the given reference

basketReference – String – the reference of the basket

basketType – String – the type of the basket

basketDescription – String – the description of the basket

basketResponseCode – String – A specific basket code to indict whether the basket was implicitly created by the server.

basketStatus – String – the status of the basket. Fresh baskets have the status NEW. Baskets in progress have the status of IN_PROGRESS. Baskets will have been submitted to retail processing have the status SUBMITTED.

Remarks:

Updates the quantity on an existing line in the basket. The line number is used to identify which line to update. Setting the quantity to zero will result in the line being deleted.

Scenarios

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Service is given a valid lineNumber and basketReference .ReturnBasket is not set

Success

The basket items quantity is updated.

200

200 Success ok

2

Service is given a valid lineNumber and basketReference. ReturnBasket is set to true

Success

The basket items quantity is updated. The basket is returned to the client

200

IBasketResponse: basket

Example Request:

PATCH: http://localhost:8080/WebRestApi/rest/baskets/PRIMARY/items/1/quantity

Content-Type: application/json

{

“quantity” : “1”,

“returnBasket” : true

}

Example Response:

Example Update Basket Item Response  Expand source

200 OK

Copy/Move All Items from one Basket to another #

Service URLs

  • Copy: POST /baskets/manager/copy
  • Move: POST /baskets/manager/move

Request Body:

ModifyBasketItemsRequest

sourceBasketReference – String – the basket reference of the source basket to copy/move the items from.

targetBasketReference – String – The basketReference of the basket to copy/move the items to.

Response Body:

IModifyBasketItemsResponse

sourceLocation – String – location of the URL for the destination basket

destinationLocation – String – location of the URL for the destination basket

Remarks:

Copies all Line Items from the source basket (BasketReference) to the Basket identified by the targetBasketReference. If the Copy operation is specified, the source basket is retained with all its items. If the Move operation is specified, all items of the source basket are deleted and in all cases except the PRIMARY Basket, the source basket is also deleted.

Scenarios

Scenario

Outcome

Expected behaviour

Status Code

Response

1

A user wants to copy over items from their primary basket to a wishlist basket.

Success

The items are copied over from the source to the target basket.

200

ModifyBasketItemsResponse

2

A user wants to move over items from their primary basket to a wishlist basket.

Success

The items are moved over from the source to the target basket. The source (primary) should have it’s basket emptied.

200

ModifyBasketItemsResponse

3

A user wants to move over items from a wishlist basket to a primary basket.

Success

The items are moved over from the source to the target basket. The source (wishlist) should be removed.

200

ModifyBasketItemsResponse

Example Request

POST /baskets/manager/copy

{

“sourceBasketReference”: “WWNOGKK4FVCOZJMKGDE6ZSIQA4”,

“targetBasketReference”: “PRIMARY”

}

Example Response

{

“sourceBasketLocation”: “http://localhost:8080/WebRestApi/rest/baskets/WWNOGKK4FVCOZJMKGDE6ZSIQA4”,

“destinationBasketLocation”: “http://localhost:8080/WebRestApi/rest/baskets/PRIMARY”

}

Remove all Items from a Basket #

Service URL: DELETE /baskets/{basketReference}/items

Tokens:

basketReference – The basket reference of the basket to remove all items from a basket.

Remarks:

Removes all items from a basket.

Scenarios

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Delete all items for a valid primary basket reference.

Success

All items should be deleted for the requested basket.

200

200 Success Ok

2

Delete all items for a valid wishlist basket reference.

Success

All items should be deleted for the requested basket.

200

200 Success Ok

3

Delete all items for an invalid basket reference.

NotFound

A bad request error should be raised.

400

ErrorMessage :Bad request. Could not delete items for basket reference <basketReference>

Example Request:

DELETE: http://localhost:8080/WebRestApi/rest/baskets/MUCFJAIBTVDK3HHNC444ZALMV4/items

Example Response:

Status: 200 OK

Request a Promotion Calculation #

Not sure we need/want this

Service URL: PATCH /baskets/{basketReference}/promotions

Tokens:

basketReference – The basket reference of the basket to add the items to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Parameters:

returnBasket – Boolean – If true the updated basket is returned – Optional, defaults to false

Response Body:

BasketResponse – The updated basket if returnBasket is true

basket – IBasket – The basket associated with the given reference

basketReference – String – the reference of the basket

basketType – String – the type of the basket

basketDescription – String – the description of the basket

basketResponseCode – String – A specific basket code to indict whether the basket was implicitly created by the server.

basketStatus – String – the status of the basket. Fresh baskets have the status NEW. Baskets in progress have the status of IN_PROGRESS. Baskets will have been submitted to retail processing have the status SUBMITTED.

Remarks:

Recalculate promotions on the associated basket. Typically promotions will only be updated when items are added/removed/updated, this service can be called to force an update if required.

Example Request:

PATCH: http://localhost:8080/WebRestApi/rest/baskets/PRIMARY/promotions?returnBasket=true

id_token: <identity_token>

Example Response:

 Expand source

{

“basket”: {

“items”: [

{

“@type”: “orderDetailsItem”,

“description”: “###.###”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 0,

“lineNumber”: 1,

“netValue”: 0,

“value”: 0,

“dateTimeCreated”: “2019-07-22T16:04:03.000+01:00”,

“userId”: “CUST_USER”,

“type”: “VALUE”,

“orderReference”: “17”,

“customerOrderTypeId”: “CUSTOMER_ORDER”

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 5995,

“lineNumber”: 2,

“netValue”: 5995,

“value”: 5995,

“dateTimeCreated”: “2019-07-22T16:04:26.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-8”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “8”,

“sizeRangeId”: “MENS_SHOES”

}

}

],

“balance”: 5995,

“currencyId”: “GBP”,

“currencyDescription”: “Pounds Sterling”,

“taxInclusive”: true,

“taxSchemeId”: “UK”,

“itemCount”: 2,

“saleItemQuantity”: 1,

“returnItemQuantity”: 0,

“saleItemNetValue”: 5995,

“returnItemNetValue”: 0,

“merchandiseItemQuantity”: 1,

“merchandiseItemValue”: 5995,

“total”: 5995,

“grossTotal”: 5995,

“taxTotal”: 0,

“totalTaxAdjustment”: 0,

“preAuthBalance”: 0,

“effectiveSaleValue”: 5995

},

“basketReference”: “PRIMARY”,

“basketType”: “PRIMARY”,

“basketDescription”: “Primary”,

“basketStatus”: “IN_PROGRESS”

}

List the Customers Baskets #

Service URL: GET /baskets

Parameters:

pageSize – Integer – The maximum number of baskets to return in a single page – Optional, default to 10, limited to 100

pageOffset – Integer – The offset, in rows, of the first basket to return – Optional, default to 0

extended – boolean – If the flag is true, then a list of basket responses is returned. Otherwise, a list of basket summaries is returned. Defaults to false

Response Body:

basksetSummaries – A list of basket summaries, excluding the Primary basket, for the given customer. The basket summaries only include details about the basket’s reference, type, and description

When the extended flag is true

basketResponses – A list of basket responses, excluding the Primary basket, for the given customer. The list will include the basketReferences to allow the details to be later retrieved.

Remarks:

List the baskets associated with the given customer, excluding the Primary basket. It is not possible to list baskets associated with an anonymous customer – if the customer loses their reference to an anonymous basket the basket cannot be recalled.

Scenarios

Scenario

Outcome

Expected behaviour

Status Code

Response

1

The list customer baskets is called with a valid list customer baskets request

Success

Loads a list of summaries for the customer’s baskets, excluding their primary baskets.

200

IListCustomerBasketsSummariesResponse: basketSummaries

2

The list customer baskets is called with a valid list customer baskets request and the extended flag is true

Success

Loads a list of basket response for the customer, excluding their primary baskets.

200

IListCustomerBasketsResponse: basketResponses

Example Request:

Example List Customer Baskets Request

GET: http://localhost:8080/WebRestApi/rest/baskets

Example Response:

Example List Customer Baskets Response  Expand source

{

“basketSummaries”: [

{

“reference”: “4PYQCL2LQ5EQXM2TYE3PBTGO4A”,

“type”: “WISHLIST”,

“description”: “Monday”

},

{

“reference”: “BK3TSNHJJZF23F7K7PJ4YDWK5M”,

“type”: “WISHLIST”,

“description”: “Christmas Wishlist”

},

{

“reference”: “BRC7SUUIJ5CU3OKJ6K3ZJFVZR4”,

“type”: “WISHLIST”,

“description”: “Stored Basket”

},

{

“reference”: “BTRGMY7JHBDHDOXRBJR5CZVFAA”,

“type”: “WISHLIST”,

“description”: “Postman2”

},

{

“reference”: “CKKTFIP7FVAMDHHMPI27TZ6TD4”,

“type”: “WISHLIST”,

“description”: “Postman2”

},

{

“reference”: “GYM5JXTEFFE4PNTQJZYF6M3HBM”,

“type”: “WISHLIST”,

“description”: “Postman2”

},

{

“reference”: “H3TD3SGOIBHUROO63N7SI7HDQ4”,

“type”: “WISHLIST”,

“description”: “Xmas Wishlist”

},

{

“reference”: “HLMC4D7VIVBUFI6NOFEB4APIFQ”,

“type”: “WISHLIST”,

“description”: “TEst 1”

},

{

“reference”: “MUZ5LFOTGFDGJK7VNPERD5X65M”,

“type”: “WISHLIST”,

“description”: “Stored Basket”

},

{

“reference”: “NDCRLG3TBFA5DGZBRESAGMZPMA”,

“type”: “WISHLIST”,

“description”: “BLANK”

},

{

“reference”: “Q7J6EFEULFGD7BB7J6BKLVWVXE”,

“type”: “WISHLIST”,

“description”: “My Bag”

},

{

“reference”: “R7WB2IJJURESPIRPQUOHPP46EU”,

“type”: “WISHLIST”,

“description”: “Dehan”

},

{

“reference”: “RQVE6DPYSNHQLLM2SCEB5KO2ZE”,

“type”: “WISHLIST”,

“description”: “James”

},

{

“reference”: “TXS7FJKNSFEZXNVKRNQ3JLUVSY”,

“type”: “WISHLIST”,

“description”: “Easter”

},

{

“reference”: “YUEPHVMGLJFIBDIEWE42JVW2UM”,

“type”: “WISHLIST”,

“description”: “Stored Basket”

}

]

}

Example Request with the extended flag set to true:

Example List Customer Baskets Request

GET: http://localhost:8080/WebRestApi/rest/baskets

Example Response:

 Expand source

{

“basketResponses”: [

{

“basket”: {

“items”: [

{

“@type”: “orderDetailsItem”,

“description”: “###.###”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 0,

“lineNumber”: 1,

“netValue”: 0,

“value”: 0,

“dateTimeCreated”: “2019-02-11T13:23:18.000+00:00”,

“userId”: “CUST_USER”,

“type”: “VALUE”,

“orderReference”: “0002190211132318”,

“performedOffline”: true,

“customerOrderTypeId”: “CUSTOMER_ORDER”

},

{

“@type”: “orderDetailsItem”,

“description”: “###.###”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 0,

“lineNumber”: 2,

“netValue”: 0,

“value”: 0,

“dateTimeCreated”: “2019-01-22T14:39:26.000+00:00”,

“userId”: “CUST_USER”,

“type”: “VALUE”,

“orderReference”: “120”,

“customerOrderTypeId”: “CUSTOMER_ORDER”

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 5590,

“lineNumber”: 3,

“netValue”: 5995,

“value”: 5995,

“dateTimeCreated”: “2019-01-22T14:39:28.000+00:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: -405,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-12”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“modifiers”: [

{

“@type”: “distributedPromotionSavingItem”,

“lineNumber”: 3,

“distributedSaving”: 405,

“promotionKey”: {

“promotionId”: “3”,

“groupKey”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“modifierType”: “PROMOTION”,

“effectiveValue”: -405

}

],

“sizeId”: {

“id”: “12”,

“sizeRangeId”: “MENS_SHOES”

}

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 5589,

“lineNumber”: 4,

“netValue”: 5995,

“value”: 5995,

“dateTimeCreated”: “2019-01-22T14:39:30.000+00:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: -406,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-12”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“modifiers”: [

{

“@type”: “distributedPromotionSavingItem”,

“lineNumber”: 4,

“distributedSaving”: 406,

“promotionKey”: {

“promotionId”: “3”,

“groupKey”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“modifierType”: “PROMOTION”,

“effectiveValue”: -406

}

],

“sizeId”: {

“id”: “12”,

“sizeRangeId”: “MENS_SHOES”

}

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “BLUE”,

“colourRangeId”: “WOMENS_DRESSES”

},

“description”: “Crinkle Day Dress”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 2609,

“lineNumber”: 5,

“netValue”: 2798,

“value”: 2798,

“dateTimeCreated”: “2019-01-28T11:41:35.000+00:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: -189,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “MB229XML-4”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 2798,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/MB229XM-3.jpg”,

“type”: “VALUE”,

“mmGroupId”: “WOMENS_DRESSES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Women’s Dresses”,

“brandGroupId”: “INTERNAL”,

“brandGroupHierarchyId”: “FASHION”,

“modifiers”: [

{

“@type”: “distributedPromotionSavingItem”,

“lineNumber”: 5,

“distributedSaving”: 189,

“promotionKey”: {

“promotionId”: “3”,

“groupKey”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“modifierType”: “PROMOTION”,

“effectiveValue”: -189

}

],

“sizeId”: {

“id”: “16”,

“sizeRangeId”: “WOMENS_DRESSES”

}

},

{

“@type”: “voucherRedemptionItem”,

“voucherDetails”: {

“voucherTypeId”: {

“regionId”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

},

“voucherTypeId”: “10_POUND”

}

},

“track”: false,

“markItemsUsed”: false,

“currencyId”: “GBP”,

“description”: “£10 Pound off”,

“deviceId”: “pos2@0001.enactor”,

“lineNumber”: 6,

“dateTimeCreated”: “2019-02-07T11:47:15.000+00:00”,

“userId”: “CUST_USER”,

“type”: “VALUE”

}

],

“balance”: 13788,

“currencyId”: “GBP”,

“currencyDescription”: “Pounds Sterling”,

“taxInclusive”: true,

“taxSchemeId”: “UK”,

“itemCount”: 6,

“saleItemQuantity”: 3,

“returnItemQuantity”: 0,

“saleItemNetValue”: 13788,

“returnItemNetValue”: 0,

“merchandiseItemQuantity”: 3,

“merchandiseItemValue”: 14788,

“total”: 13788,

“grossTotal”: 14788,

“taxTotal”: 0,

“promotionCalculation”: {

“totalSaving”: 1000,

“totalPoints”: 0,

“itemsArray”: [

{

“promotionSavingItem”: {

“saving”: 1000,

“savingAdjustment”: 0,

“distributedSavings”: [

{

“distributedPromotionSavingItem”: {

“lineNumber”: 3,

“distributedSaving”: 405,

“promotionKey”: {

“promotionId”: “3”,

“groupKey”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“modifierType”: “PROMOTION”,

“effectiveValue”: -405

}

},

{

“distributedPromotionSavingItem”: {

“lineNumber”: 4,

“distributedSaving”: 406,

“promotionKey”: {

“promotionId”: “3”,

“groupKey”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“modifierType”: “PROMOTION”,

“effectiveValue”: -406

}

},

{

“distributedPromotionSavingItem”: {

“lineNumber”: 5,

“distributedSaving”: 189,

“promotionKey”: {

“promotionId”: “3”,

“groupKey”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“modifierType”: “PROMOTION”,

“effectiveValue”: -189

}

}

],

“adjustEmployeeBalance”: false,

“promotionDescription”: “£10 off when you spend £100”,

“promotionQuantity”: 1,

“operationWithDiscounts”: “APPLIES_AFTER_ON_GROSS”,

“promotionKey”: {

“promotionId”: “3”,

“groupKey”: {

“id”: “All”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

}

},

“triggers”: [

{

“rewardValue”: 1000,

“lineRewardValue”: 405,

“distributeSaving”: true,

“lineNumber”: 3,

“quantity”: 1,

“unitValue”: 5995,

“triggerCount”: 1

},

{

“rewardValue”: 1000,

“lineRewardValue”: 406,

“distributeSaving”: true,

“lineNumber”: 4,

“quantity”: 1,

“unitValue”: 5995,

“triggerCount”: 1

},

{

“rewardValue”: 1000,

“lineRewardValue”: 189,

“distributeSaving”: true,

“lineNumber”: 5,

“quantity”: 1,

“unitValue”: 2798,

“triggerCount”: 1

}

]

}

}

]

},

“totalTaxAdjustment”: 0,

“preAuthBalance”: 0,

“effectiveSaleValue”: 13788

},

“basketReference”: “4PYQCL2LQ5EQXM2TYE3PBTGO4A”,

“basketType”: “WISHLIST”,

“basketDescription”: “Monday”,

“basketStatus”: “NEW”

},

]

}

Get a Baskets Details #

Service URL: GET /baskets/{basketReference}

Tokens:

basketReference – The basket reference of the basket to add the items to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Parameters:

basketType – String – the type of basket to query for

Response Body:

BasketResponse

basket – IBasket – The basket associated with the given reference

basketReference – String – the reference of the basket

basketType – String – the type of the basket

basketDescription – String – the description of the basket

basketResponseCode – String – A specific basket code to indict whether the basket was implicitly created by the server.

basketStatus – String – the status of the basket. Fresh baskets have the status NEW. Baskets in progress have the status of IN_PROGRESS. Baskets will have been submitted to retail processing have the status SUBMITTED.

Remarks:

Load an existing basket and return it, without making any changes. A user should only be able to load baskets which belong to them.

Scenarios:

Scenario

Outcome

Expected behavior

Status Code

Response

1

Get Basket service has been given a valid basket reference

Success

The basket is returned to the client

200

BaskerResponse

2

Get Basket service has been given a basket reference that doesn’t exist

NotFound

The basket is not returned. A NotFound outcome is returned with a 404 not found response.

404

Error Message: Failed to retrieve basket, outcome: NotFound

3

Get Basket service has been given a PRIMARY basket reference with a valid token.

Success

The primary basket for a customer is returned to the client

200

BaskerResponse

4

Get Basket service has been given a PRIMARY basket reference but no token is supplied

Fail

The basket is not returned. The service will fail because the customer’s information is missing

500

Error Message: Failed to retrieve basket, outcome: Fail

Cucumber (Deprecated):

Number

Scenario

Outcome

Response

1

Call GetBasket process for a wishlist basket given a valid basket key/reference

Success

BasketResponse

2

Call GetBasket process for a primary basket

Success

BasketResponse

Rest Assured (Deprecated):

Number

Scenario

StatusCode

Response

1

Call GetBasket service for a wishlist basket given a valid basket key/reference

200

BasketResponse

2

Call GetBasket service for a basket given a invalid basket key/reference

500

ErrorMessage: Failed to retrieve basket

3

Call GetBasket service for a primary basket

200

BasketResponse

Example Request:

GET: http://localhost:8080/WebRestApi/rest/baskets/PRIMARY

Example Response:

Example Get Basket Response  Expand source

{

“basket”: {

“items”: [

{

“@type”: “orderDetailsItem”,

“description”: “###.###”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 0,

“lineNumber”: 1,

“netValue”: 0,

“value”: 0,

“dateTimeCreated”: “2019-07-19T16:18:23.000+01:00”,

“userId”: “CUST_USER”,

“type”: “VALUE”,

“orderReference”: “15”,

“customerOrderTypeId”: “CUSTOMER_ORDER”

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 5995,

“lineNumber”: 2,

“netValue”: 5995,

“value”: 5995,

“dateTimeCreated”: “2019-07-19T16:18:26.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-12”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “12”,

“sizeRangeId”: “MENS_SHOES”

}

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHIRTS”

},

“description”: “Button Down Collar Red”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 2595,

“lineNumber”: 3,

“netValue”: 2595,

“value”: 2595,

“dateTimeCreated”: “2019-07-19T16:21:08.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “DF517XM-1”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 2595,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/DF517XM-2.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHIRTS”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shirts”,

“brandGroupId”: “INTERNAL”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “S”,

“sizeRangeId”: “MENS_SHIRTS”

}

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHIRTS”

},

“description”: “Button Down Collar Red”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 2595,

“lineNumber”: 4,

“netValue”: 2595,

“value”: 2595,

“dateTimeCreated”: “2019-07-19T16:21:10.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “DF517XM-1”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 2595,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/DF517XM-2.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHIRTS”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shirts”,

“brandGroupId”: “INTERNAL”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “S”,

“sizeRangeId”: “MENS_SHIRTS”

}

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHIRTS”

},

“description”: “Button Down Collar Red”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 2595,

“lineNumber”: 5,

“netValue”: 2595,

“value”: 2595,

“dateTimeCreated”: “2019-07-19T16:21:11.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “DF517XM-1”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 2595,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/DF517XM-2.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHIRTS”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shirts”,

“brandGroupId”: “INTERNAL”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “S”,

“sizeRangeId”: “MENS_SHIRTS”

}

},

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHIRTS”

},

“description”: “Button Down Collar Red”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 2595,

“lineNumber”: 6,

“netValue”: 2595,

“value”: 2595,

“dateTimeCreated”: “2019-07-19T16:21:13.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “DF517XM-1”,

“quantity”: 1,

“netQuantity”: 1,

“isReturn”: false,

“unitPrice”: 2595,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/DF517XM-2.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHIRTS”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shirts”,

“brandGroupId”: “INTERNAL”,

“brandGroupHierarchyId”: “FASHION”,

“sizeId”: {

“id”: “S”,

“sizeRangeId”: “MENS_SHIRTS”

}

}

],

“balance”: 16375,

“currencyId”: “GBP”,

“currencyDescription”: “Pounds Sterling”,

“taxInclusive”: true,

“taxSchemeId”: “UK”,

“itemCount”: 6,

“saleItemQuantity”: 5,

“returnItemQuantity”: 0,

“saleItemNetValue”: 16375,

“returnItemNetValue”: 0,

“merchandiseItemQuantity”: 5,

“merchandiseItemValue”: 16375,

“total”: 16375,

“grossTotal”: 16375,

“taxTotal”: 0,

“totalTaxAdjustment”: 0,

“preAuthBalance”: 0,

“effectiveSaleValue”: 16375

},

“basketReference”: “PRIMARY”,

“basketType”: “PRIMARY”,

“basketDescription”: “Primary”,

“basketStatus”: “IN_PROGRESS”

}

Associate a Basket with the Customer #

Service URL: PATCH /baskets/{basketReference}/customer

Tokens:

basketReference – The basket reference of the basket to add the items to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Parameters:

mergeRule – String – Determines how to behave if there is a merge conflict – Optional, defaults to ERROR

returnBasket – Boolean – If true the updated basket is returned – Optional, defaults to true

Response:

BasketResponse – The updated basket, if returnBasket is true

basket – IBasket – The basket associated with the given reference

basketReference – String – the reference of the basket

basketType – String – the type of the basket

basketDescription – String – the description of the basket

basketResponseCode – String – A specific basket code to indict whether the basket was implicitly created by the server.

basketStatus – String – the status of the basket. Fresh baskets have the status NEW. Baskets in progress have the status of IN_PROGRESS. Baskets will have been submitted to retail processing have the status SUBMITTED.

Remarks:

Updates the basket so it is associated with the customer using the accessToken to determine the customer id. Note that this does not set the ‘CustomerRetailDetails’ on the basket.

When the basket is associated with the customer this may result in a conflict:

i. If the basket is a primary basket, but the customer already has a primary basket, or

ii. If the basket is a wishlist and the customer already has a wishlist with the same name.

In these cases the following table determines how the system should behave, as controlled by the mergeRule parameter:

Merge Rule

Result

ERROR

Return an error and do not make any changes

MERGE

Copy items from the incoming basket into the existing basket. Return the existing basket and its reference. Discard the incoming basket.

OVERWRITE

Associate the incoming basket with the customer and overwrite any existing basket. Return the basket and its reference.

DISCARD

Discard the incoming basket. Return the existing basket and its reference.

Notes:

The service checks for an existing wishlist basket by looking for a stored basket with a basket type of WISHLIST, and matches the basket description of the incoming baskets.

Merge Rule Scenarios:

No Merge Rule:

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Basket manager service recieves an associate basket customer request with no merge rule

Fail

Return an error and do not make any changes

500

ErrorMessage: Failed to associate basket with customer, outcome (500)

Error:

Scenario

Outcome

Expected behaviour

Status Code

Response

1

Basket manager service recieves an associate basket customer request with the merge Rule of ERROR.

Fail

Return an error and do not make any changes

500

ErrorMessage: Failed to associate basket with customer, outcome (500)

Merge:

All Scenarios start with: Basket manager service recieves an associate basket customer request with the merge Rule of MERGE.

Scenario

Outcome

Expected behaviour

Status Code

Response

1

The customer wants to associate a Primary basket (Annoymous primary basket).

Success

Copy items from the incoming basket into the existing basket. Return the existing basket and its reference. Discard the incoming basket.

200

Return the existing basket (BasketResponse)

2

The customer wants to associate a Wishlist basket. (Annoymous wishlist basket). The existing basket already exists.

Success

Copy items from the incoming basket into the existing basket. Return the existing basket and its reference. Discard the incoming basket.

200

Return the existing basket (BasketResponse)

3

The customer wants to associate a Wishlist basket. (Annoymous wishlist basket). The existing basket does not exists.

Success

Stored the incoming basket as a new basket against the customer. Return the existing basket and its reference. Discard the incoming basket.

200

Return the existing basket (BasketResponse)

4

The customer wants to associate a Wishlist basket which is already associated with a customer

NotAllowed

Return a NotAllowed error and do not make any changes

400: Bad Request

ErrorMessage: Failed to associate basket with customer. Basket already associated with customer, outcome (500)


Overwrite:

Scenario

Outcome

Expected behaviour

Status Code

Response

1

The customer wants to associate a Primary basket (Annoymous primary basket).

Success

Associate the incoming basket with the customer and overwrite any existing basket. Return the basket and its reference.

200

Return the existing basket (BasketResponse)

2

The customer wants to associate a Primary basket (Annoymous wishlist basket).

Success

Associate the incoming basket with the customer and overwrite any existing basket. Return the basket and its reference.

200

Return the existing basket (BasketResponse)

Discard:

All Scenarios start with: Basket manager service recieves an associate basket customer request with the merge Rule of DISCARD.

Scenario

Outcome

Expected behaviour

Status Code

Response

1

The customer wants discard the incoming wishlist basket.

Success

200

IBasketResponse: basket, basketReference…

2

The customer wants discard the incoming primary basket

Success

The incoming basket is discarded. Returns the customers existing primary basket and its reference.

200

IBasketResponse: basket, basketReference…

Update a basket’s description #

Service URL: PATCH /baskets/{basketReference}/description

Tokens:

basketReference – The basket reference of the basket to add the items to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Request:

UpdateBasketDescriptionRequest – extends BasketRetrievalRequest

  • description – String – the new description of the wishlist – max length 20

Parameters:

  • returnBasket – Boolean – Should the basket be returned in the request. (Optional, defaults to false)

Response:

BasketResponse

basket – IBasket – The basket associated with the given reference

basketReference – String – the reference of the basket

basketType – String – the type of the basket

basketDescription – String – the description of the basket

basketResponseCode – String – A specific basket code to indict whether the basket was implicitly created by the server.

basketStatus – String – the status of the basket. Fresh baskets have the status NEW. Baskets in progress have the status of IN_PROGRESS. Baskets will have been submitted to retail processing have the status SUBMITTED.

Remarks:

  • Updates an existing baskets description. The basket must already exist, otherwise, the service will return a 404 not found. If the description is empty in the request, the service should return 400 bad request. If the service call is successful, a 200 OK response is returned. However, if the returnBasket parameter is true, the basket is also returned in the response.

All Scenarios start with: Basket manager service receives an associate basket customer request with the merge Rule of DISCARD.

Scenario

Outcome

Expected behaviour

Status Code

Response

1

The Update Basket Service has received a valid request for a basket reference that exists.

Success

The baskets description is updated

200

200 OK Success

2

The Update Basket Service has received a valid request for a basket reference that exists with the flag returnBasket set to true

Success

The baskets description is updated.

200

BasketResponse

3

The Update Basket Service has received a valid request for a basket that does not exist.

NotFound

The baskets description is not updated. An error message is returned with a 404 response.

404

ErrorMessage:

Failed to update baskets description, outcome: NotFound

Example Request

 Expand source

PATCH /WebRestApi/rest/baskets/PRIMARY/description

Content-Type: application/json

{

“description”: “New Description”

}

Submit a basket #

Service URL: POST /baskets/{basketReference}/submit

Tokens:

basketReference – The basket reference of the basket to add the items to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Response

SubmitBasketResponse

orderId – String – the id of the order submitted

newBasketReference – String – the id of the new basket

Remarks

  • Submits a basket for transaction processing. Once submitted, a new transaction is created and stored. The new transaction is returned in the response. The id of the order submitted is also returned.

Scenarios

Scenario

Outcome

Expected behaviour

Status Code

Response

1

The submit basket service was given a valid basket reference to be submitted

Success

The basket was submitted successfully

200

SubmitBasketResponse

2

The submit basket service was given an invalid basket reference to be submitted

NotFound

The basket was not submitted. NotFound error response is returned.

404

ErrorMessage: Failed to submit basket, outcome: NotFound

3

The submit basket service was given a valid basket reference to be submitted but the basket could not be submitted

Fail

The basket was not submitted. Fail error response is returned.

ErrorMessage: Failed to submit basket, outcome: Fail

Example Request

 Expand source

http://localhost:8080/WebRestApi/rest/baskets/PRIMARY/submit

Example Response

 Expand source

200 OK

{

“orderId” : “00000033”,

“newBasketReference” : “A6U7KWLMYFCZ7CNFLAUE67HFKY”

}

Get Transction #

Service URL: GET /baskets/{basketReference}/transaction

Tokens:

basketReference – The basket reference of the basket to add the items to, or can be ‘PRIMARY’ to add to the PRIMARY basket.

Response:

TransactionResponse

transaction – ITransaction – returns the transaction of the basket

Remarks

Todo

Example Request

GET /WebRestApi/rest/baskets/PRIMARY/transaction

Host: localhost:8080

subject: 1

Example Response

Example Get Transaction Response  Expand source

{

“transaction”: {

“source”: “pos2@0001.enactor”,

“sourceApplication”: “POS”,

“topic”: “Transactions”,

“sequenceNumber”: 0,

“transactionId”: “00010002000571907191549452”,

“applicationId”: “WEB_REST_API”,

“transactionNumber”: 57,

“originatedBy”: {

“regionId”: {

“id”: “UK”,

“groupTypeId”: “region”,

“groupHierarchyId”: “All”

},

“branchNumber”: 1,

“terminalNumber”: 2,

“transactionNumber”: 57,

“userId”: {

“id”: “CUST_USER”

},

“deviceId”: {

“id”: “pos2@0001.enactor”

},

“locationId”: {

“id”: “0001”

}

},

“dateTimeCreated”: “2019-07-19T15:49:45.000+01:00”,

“basket”: {

“items”: [

{

“@type”: “styleColourSizeItem”,

“colourId”: {

“id”: “RED”,

“colourRangeId”: “MENS_SHOES”

},

“description”: “Vans Canvas Shoes”,

“deviceId”: “pos2@0001.enactor”,

“effectiveNetValue”: 59950,

“lineNumber”: 1,

“netValue”: 59950,

“value”: 59950,

“dateTimeCreated”: “2019-07-19T15:35:52.000+01:00”,

“userId”: “CUST_USER”,

“modifiersNetValue”: 0,

“modifiersEffectiveNetValue”: 0,

“modifiersVoidQuantity”: 0,

“modifiersQuantity”: 0,

“notDiscountable”: false,

“maxDiscount”: 0,

“handKeyed”: true,

“productID”: “VV639JS-8”,

“quantity”: 10,

“netQuantity”: 10,

“isReturn”: false,

“unitPrice”: 5995,

“sourceInventoryType”: “AVA”,

“orderable”: true,

“priceTypeId”: “R”,

“productTypeId”: “skuProduct”,

“productImageURL”: “image://PRODUCT/VV639JS-1.jpg”,

“type”: “VALUE”,

“mmGroupId”: “MENS_SHOES”,

“mmGroupHierarchyId”: “FASHION”,

“mmGroupVariantGroupId”: “All”,

“mmGroupVariantHierarchyId”: “All”,

“mmGroupDescription”: “Mens Shoes”,

“brandGroupId”: “VANS”,

“brandGroupHierarchyId”: “FASHION”,

“modifiers”: [

{

“@type”: “quantityModifier”,

“modifierItemLine”: 2,

“newQuantity”: 6,

“originalQuantity”: 1

},

{

“@type”: “quantityModifier”,

“modifierItemLine”: 3,

“newQuantity”: 4,

“originalQuantity”: 6

},

{

“@type”: “quantityModifier”,

“modifierItemLine”: 4,

“newQuantity”: 10,

“originalQuantity”: 4

},

{

“@type”: “quantityModifier”,

“modifierItemLine”: 5,

“newQuantity”: 10,

“originalQuantity”: 10

}

],

“sizeId”: {

“id”: “8”,

“sizeRangeId”: “MENS_SHOES”

}

},

{

“@type”: “quantityModifierItem”,

“description”: “Modify Quantity”,

“deviceId”: “pos2@0001.enactor”,

“lineNumber”: 2,

“dateTimeCreated”: “2019-07-19T16:00:33.000+01:00”,

“userId”: “CUST_USER”,

“type”: “QUANTITY”,

“newQuantity”: 6

},

{

“@type”: “quantityModifierItem”,

“description”: “Modify Quantity”,

“deviceId”: “pos2@0001.enactor”,

“lineNumber”: 3,

“dateTimeCreated”: “2019-07-19T16:00:58.000+01:00”,

“userId”: “CUST_USER”,

“type”: “QUANTITY”,

“newQuantity”: 4

},

{

“@type”: “quantityModifierItem”,

“description”: “Modify Quantity”,

“deviceId”: “pos2@0001.enactor”,

“lineNumber”: 4,

“dateTimeCreated”: “2019-07-19T16:03:48.000+01:00”,

“userId”: “CUST_USER”,

“type”: “QUANTITY”,

“newQuantity”: 10

},

{

“@type”: “quantityModifierItem”,

“description”: “Modify Quantity”,

“deviceId”: “pos2@0001.enactor”,

“lineNumber”: 5,

“dateTimeCreated”: “2019-07-19T16:07:04.000+01:00”,

“userId”: “CUST_USER”,

“type”: “QUANTITY”,

“newQuantity”: 10

}

],

“balance”: 59950,

“currencyId”: “GBP”,

“currencyDescription”: “Pounds Sterling”,

“taxInclusive”: true,

“taxSchemeId”: “UK”,

“itemCount”: 5,

“saleItemQuantity”: 10,

“returnItemQuantity”: 0,

“saleItemNetValue”: 59950,

“returnItemNetValue”: 0,

“merchandiseItemQuantity”: 10,

“merchandiseItemValue”: 59950,

“total”: 59950,

“grossTotal”: 59950,

“taxTotal”: 0,

“totalTaxAdjustment”: 0,

“preAuthBalance”: 0,

“effectiveSaleValue”: 59950

},

“loyaltyPointsDetails”: {

“dayNumber”: 0,

“loyaltyPointsBalance”: 0,

“loyaltyPointsEarned”: 0,

“promotionalLoyaltyPointsEarned”: 0,

“loyaltyPointsMissed”: 0,

“loyaltyPointsRate”: 0,

“loyaltyAccountOffline”: true,

“loyaltyPointsUsed”: 0,

“totalSpend”: 0,

“spendToNextTier”: 0,

“externalProvider”: false,

“noLoyaltyUpdate”: false,

“rewardValue”: 0,

“rewardValueRedeemed”: 0

}

}

}

Go to Top