Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 22 Next »

Technical Frontend analysis

Currently to show the promo code field, we need to configure the sanity with CBA offers and the CBA offers is deprecated.

When we applied the promo code on Whitelabel, we receive an error: Something went wrong. Please try again.

Besides that we have a possible problem: these masses of data are prod-voucherify

This is the example of the request/response when applying a promotional code:

Request:

{
    "code": "8B9IKPQK",
    "cognitoId": "ec5cec01-b41b-509b-9111-310ab5a18154",
    "shouldRedeem": true,
    "offers": [
        "7bf2c11c-ec68-4d44-abd3-597b3967fcef"
    ]
}

Response:

{
    "data": {
        "validatePromoCode": {
            "code": "8B9IKPQK",
            "reason": "misconfiguredCode",
            "message": "missing offerId",
            "isValid": false,
            "isRedeemed": false,
            "offerId": "",
            "__typename": "CBACouponResponse"
        }
    }
}

Attention point

  • We are always sending cognitoId attribute (cognitoId is like user id);

  • The promo code is CBACoupon type;

  • We send an available offer "7bf2c11c-ec68-4d44-abd3-597b3967fcef";

Technical Backend analysis

On backend they use the intl-promotion-service repository.

There is a method validateCoupon that receives the frontend call

  • path: intl-promotion-service/src/providers/vendors/voucherify.ts

This flow will create customer data on Voucherity with metadata:

{
    metadata: {
      userIdType: "cognitoId",
    },
    source_id: "ec5cec01-b41b-509b-9111-310ab5a18154",
  }
  • if userIdType: "cognitoId" so, the promo code is CBA type.

  • if userIdType: "loyaltyId" so, the promo code is loyalty type.

  • As frontend always sends the attribute cognitoId on backend, in other words, the promo code at checkout will be always CBA type.

After validating the voucher with Voucherify API (client.validations.validateVoucher()) the return will be:

{
  valid: true,
  applicable_to: { data: [], total: 0, data_ref: 'data', object: 'list' },
  inapplicable_to: { data: [], total: 0, data_ref: 'data', object: 'list' },
  tracking_id: 'track_ECpOaiQwipBVhSIEWGSfgmnjgtme+FQfW97lzOopYE6W1FvVYiEk7A==',
  code: 'INBIIT5F',
  discount: { type: 'AMOUNT', effect: 'APPLY_TO_ORDER', amount_off: 5000 },
  start_date: '2023-08-28T07:00:00.000Z',
  metadata: { configId: '7bf2c11c-ec68-4d44-abd3-597b3967fcef' },
  campaign: 'TEST VOUCHERIFY',
  campaign_id: 'camp_bHKpj7ruZxRPLoq2BqfCx0H2'
}

The problem starts here: because the attribute metadata contains { configId: ‘7bf2c11c-ec68-4d44-abd3-597b3967fcef' }, this value is for loyalty code types, in other words, this return is wrong and should be returned an offerId attribute.


Possibility Solution

With the analysis above and as CBA promo code is deprecated (https://rbidigital.slack.com/archives/C04FZ5HTH35/p1693855082030399) we'll need to change the frontend flow to send loyaltyId instead of cognitoId.

  • The method onSubmitPromoCode calls the mutation promotionValidatePromoCodeMutation that will send the cognitoId

  • There is a mutation redeemMutation that send the loyaltyId, so we will add this mutation with some condition to send loyaltyId (to markets that want to use promo code at checkout, or to market that doesn’t use it and impact other markets).

    • This condition can be a flag on sanity maybe.

Attention point

Is possible on Voucherify, configure a promo code with expiryDate undefined, but on backend validate it and can receive an error, so it will need to use an “infinity“ expiryDate, that doesn’t have an end date finish, so we will change a validate date loyalty flow.

Currency code:

We will change this condition to validate the expiry date just there is a valide date.

After these changes on frontend and backend (POC)

  • OBS:. This test was done, mocking the codes and APIs responses, using apollo studio

Calling LoyaltyValidatePromoCode

request:

{
  "input": {
    "code": "8B9IKPQK",
    "loyaltyId": "ec5cec01-b41b-509b-9111-310ab5a18154",
    "shouldRedeem": true
  }
}

response:

{
  "data": {
    "loyaltyValidatePromoCode": {
      "code": "8B9IKPQK",
      "configId": "7bf2c11c-ec68-4d44-abd3-597b3967fcef",
      "isRedeemed": true,
      "isValid": true,
      "message": "",
      "personalizedOfferId": null,
      "reason": null,
      "shouldRedeem": null
    }
  }
}


How to configure a promotional code

To show the feature on checkout:

To create the promotional codes, we need to access Voucherify, this vendor is used current by PLK ES in production to create other promo codes on offers page;

  • No labels