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 19 Next »

POSSIBLE PROBLEM (these masses of data are prod-voucherify)

Frontend flow

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.

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

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

  • The promo code is CBACoupon type;

  • We sent a available offer "7bf2c11c-ec68-4d44-abd3-597b3967fcef";

Backend flow

On backend, intl-promotion-service repository receive this call.

There is a method validateCoupon that receive the frontend call

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

This flow, is create a customers datas 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.

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

after that is validated the voucher with voucherify API client.validations.validateVoucher(), this return is:

{
  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 start 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 worng, should be return an offerId attribute.

Possibility Solution:

As CBA promo code is deprecated: https://rbidigital.slack.com/archives/C04FZ5HTH35/p1693855082030399

We will need to change the frontend flow to send loyaltyId instead of cognitoId.

Currently on method: onSubmitPromoCode calls the mutation: promotionValidatePromoCodeMutation that send 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 wants to use promo code at checkout, or to market that don’t use and impact other markets). This condition can be a flag on sanity maybe.

There is another attention point:

Is possible on Voucherify, configure a promo code with expiryDate undefined, but on backend validate it and can receive a error, so if will need to use a “infinity“ expiryDate, that don’t have 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 this changes on frontend and backend:

  • OBS:. This test was done, mocking de 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
    }
  }
}

Configuration Promo code

For show the feature on checkout:

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

  • No labels