From 32347986e64c936b7a949e036767f0b1ce44d2f4 Mon Sep 17 00:00:00 2001 From: jkaliszuk Date: Sun, 24 Mar 2024 17:08:03 +0100 Subject: [PATCH 1/6] Added list redeemables endpoint. --- packages/sdk/README.md | 7 ++++++ packages/sdk/src/Customers.ts | 7 ++++++ packages/sdk/src/types/Customers.ts | 34 +++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/packages/sdk/README.md b/packages/sdk/README.md index 47c3914b2..51e58a431 100644 --- a/packages/sdk/README.md +++ b/packages/sdk/README.md @@ -654,6 +654,7 @@ Methods are provided within `client.customers.*` namespace. - [Update Customers in bulk](#update-customers-in-bulk) - [Update Customers' Metadata in bulk](#update-customers-metadata-in-bulk) - [Import and Update Customers using CSV](#import-and-update-customers-using-csv) +- [List Redeemables](#list-redeemables) #### [Create Customer](https://docs.voucherify.io/reference/create-customer) @@ -759,6 +760,12 @@ client.customers.updateInBulk(customers) client.customers.updateMetadataInBulk(sourceIdsAndMetadata) ``` +#### [List Redeemables](https://docs.voucherify.io/reference/list-customer-redeemables) + +```javascript +client.customers.listRedeemables(id, params) +``` + --- ### Consents diff --git a/packages/sdk/src/Customers.ts b/packages/sdk/src/Customers.ts index 9e603ce4c..1c8e91d88 100644 --- a/packages/sdk/src/Customers.ts +++ b/packages/sdk/src/Customers.ts @@ -131,6 +131,13 @@ class Customers { return this.client.post(`/customers/importCSV`, form, undefined, headers) } + + /** + * @see https://docs.voucherify.io/reference/list-customer-redeemables + */ + public listRedeemables(id: string, params?: T.CustomerRedeemablesListQueryParams) { + return this.client.get(`/redeemables/${encode(id)}/redeemables`, params) + } } export { Customers } diff --git a/packages/sdk/src/types/Customers.ts b/packages/sdk/src/types/Customers.ts index 3fe22d449..e2da3bda0 100644 --- a/packages/sdk/src/types/Customers.ts +++ b/packages/sdk/src/types/Customers.ts @@ -1,4 +1,6 @@ // Legacy code +import {VouchersResponse} from "./Vouchers"; + export interface SimpleCustomer { id: string name?: string @@ -121,6 +123,38 @@ export interface CustomerActivitiesListResponse { data: Record[] } +export interface CustomerRedeemablesListQueryParams { + limit?: number + order?: 'created_at' | '-created_at' + starting_after?: string +} + +export interface CustomerRedeemablesListResponse { + object: 'list' + total: number + data_ref: 'data' + data: Record[] +} + +export interface CustomerRedeemable { + id: string + created_at: string + redeemable_id: string + redeemable_object: string + customer_id: string + holder_role: 'OWNER' | 'REFERRER' | 'REFEREE' + campaign_id: string + campaign_type: 'LOYALTY_PROGRAM' | 'PROMOTION' | 'DISCOUNT_COUPONS' | 'GIFT_VOUCHERS' | 'REFERRAL_PROGRAM' + voucher_type: 'GIFT' | 'DISCOUNT' | 'LOYALTY_CARD' | 'LUCKY_DRAW' + redeemable: Redeemable +} + +export interface Redeemable { + type: string + voucher: VouchersResponse + status: string +} + export type CustomersCreateBody = CustomerRequest export type CustomersCreateResponse = CustomerObject | CustomerUnconfirmed From 1ec21c695561cb181312c52171c6bc103fd8d135 Mon Sep 17 00:00:00 2001 From: jkaliszuk Date: Sun, 24 Mar 2024 17:47:18 +0100 Subject: [PATCH 2/6] Added CustomerRedeemablesListQueryParams --- packages/sdk/src/types/Customers.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/sdk/src/types/Customers.ts b/packages/sdk/src/types/Customers.ts index e2da3bda0..e1ca6df2b 100644 --- a/packages/sdk/src/types/Customers.ts +++ b/packages/sdk/src/types/Customers.ts @@ -125,8 +125,10 @@ export interface CustomerActivitiesListResponse { export interface CustomerRedeemablesListQueryParams { limit?: number - order?: 'created_at' | '-created_at' - starting_after?: string + page?: number + order?: 'created_at' | '-created_at' | 'id' | '-id' + starting_after_id?: string, + filters?: Record } export interface CustomerRedeemablesListResponse { From 6804d0ad58b28736cd8f7f61e6130980b684c6a9 Mon Sep 17 00:00:00 2001 From: jkaliszuk Date: Mon, 25 Mar 2024 12:24:45 +0100 Subject: [PATCH 3/6] Fixed listRedeemables url --- packages/sdk/src/Customers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/src/Customers.ts b/packages/sdk/src/Customers.ts index 1c8e91d88..10532257e 100644 --- a/packages/sdk/src/Customers.ts +++ b/packages/sdk/src/Customers.ts @@ -136,7 +136,7 @@ class Customers { * @see https://docs.voucherify.io/reference/list-customer-redeemables */ public listRedeemables(id: string, params?: T.CustomerRedeemablesListQueryParams) { - return this.client.get(`/redeemables/${encode(id)}/redeemables`, params) + return this.client.get(`/customers/${encode(id)}/redeemables`, params) } } From b1951c2c70eaf30fc70835304bc5a82b48984dae Mon Sep 17 00:00:00 2001 From: jkaliszuk Date: Mon, 25 Mar 2024 15:48:42 +0100 Subject: [PATCH 4/6] Added Redeemable statuses. --- packages/sdk/src/types/Customers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk/src/types/Customers.ts b/packages/sdk/src/types/Customers.ts index e1ca6df2b..d13a27de4 100644 --- a/packages/sdk/src/types/Customers.ts +++ b/packages/sdk/src/types/Customers.ts @@ -154,7 +154,7 @@ export interface CustomerRedeemable { export interface Redeemable { type: string voucher: VouchersResponse - status: string + status: 'ACTIVE' | 'USED' | 'DISABLED' | 'NOT_ACTIVE' | 'EXPIRED' | 'NO_BALANCE' } export type CustomersCreateBody = CustomerRequest From c7aaa6b4ff4e9162f915e23035aec45b739e9307 Mon Sep 17 00:00:00 2001 From: jkaliszuk Date: Tue, 2 Apr 2024 15:05:54 +0200 Subject: [PATCH 5/6] Added tests for customer redeemable. Fixed formatting. --- packages/sdk/src/types/Customers.ts | 4 ++-- packages/sdk/test/customers.spec.ts | 31 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/sdk/src/types/Customers.ts b/packages/sdk/src/types/Customers.ts index d13a27de4..086361f70 100644 --- a/packages/sdk/src/types/Customers.ts +++ b/packages/sdk/src/types/Customers.ts @@ -1,5 +1,5 @@ // Legacy code -import {VouchersResponse} from "./Vouchers"; +import { VouchersResponse } from './Vouchers' export interface SimpleCustomer { id: string @@ -127,7 +127,7 @@ export interface CustomerRedeemablesListQueryParams { limit?: number page?: number order?: 'created_at' | '-created_at' | 'id' | '-id' - starting_after_id?: string, + starting_after_id?: string filters?: Record } diff --git a/packages/sdk/test/customers.spec.ts b/packages/sdk/test/customers.spec.ts index 821cdfb68..e9bf94871 100644 --- a/packages/sdk/test/customers.spec.ts +++ b/packages/sdk/test/customers.spec.ts @@ -1,6 +1,7 @@ import { voucherifyClient as client } from './client' import { generateRandomString } from './utils/generateRandomString' import { generateCustomerCSV } from './utils/generateCustomerCSV' +import { CustomerRequest, DiscountVouchersTypesEnum, DistributionsPublicationsCreateParams } from '@voucherify/sdk' jest.setTimeout(15000) @@ -173,4 +174,34 @@ describe('Customers API', () => { } expect(updatedCustomerWithNoAddress.address).toEqual(removedAddress) }) + + it('Should return redeemable for customer', async () => { + const createdCustomer: CustomerRequest = await client.customers.create({ source_id: generateRandomString() }) + + const discountCampaign = await client.campaigns.create({ + campaign_type: 'DISCOUNT_COUPONS', + name: generateRandomString(), + type: 'AUTO_UPDATE', + voucher: { + code_config: { + length: 3, + }, + type: 'DISCOUNT_VOUCHER', + discount: { + amount_off: 0, + type: DiscountVouchersTypesEnum.AMOUNT, + }, + }, + }) + + const distributionsPublicationsCreateParams: DistributionsPublicationsCreateParams = { + customer: createdCustomer, + campaign: discountCampaign, + } + + await client.distributions.publications.create(distributionsPublicationsCreateParams) + + const redeemables = await client.customers.listRedeemables(createdCustomer.id as string) + expect(redeemables.data).toBeDefined() + }) }) From e28df11252605169226911ecf8fa235ec50dc3e6 Mon Sep 17 00:00:00 2001 From: jkaliszuk Date: Tue, 2 Apr 2024 15:08:10 +0200 Subject: [PATCH 6/6] Changeset for customer redeemable --- .changeset/hungry-roses-cross.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/hungry-roses-cross.md diff --git a/.changeset/hungry-roses-cross.md b/.changeset/hungry-roses-cross.md new file mode 100644 index 000000000..a0259d520 --- /dev/null +++ b/.changeset/hungry-roses-cross.md @@ -0,0 +1,5 @@ +--- +'@voucherify/sdk': patch +--- + +New endpoint support - `customer-redeemable`