From 2ddd6ec688f3dbc35b301e05f0fa5f6d20bdc410 Mon Sep 17 00:00:00 2001 From: p-zielinski <82354717+p-zielinski@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:38:06 +0200 Subject: [PATCH] Added support for `v1/customers/{customerId}/activity` (method `listActivity`) and fix type `ValidationValidateStackableResponse` (#277) --- .changeset/quick-chairs-breathe.md | 5 +++++ packages/sdk/README.md | 18 ++++++++++-------- packages/sdk/src/Consents.ts | 2 +- packages/sdk/src/Customers.ts | 14 +++++++++++--- packages/sdk/src/types/Customers.ts | 20 ++++++++++++++++++++ packages/sdk/src/types/Validations.ts | 4 ++-- packages/sdk/test/customers.spec.ts | 20 ++++++++++++++++++++ 7 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 .changeset/quick-chairs-breathe.md diff --git a/.changeset/quick-chairs-breathe.md b/.changeset/quick-chairs-breathe.md new file mode 100644 index 000000000..2667f784b --- /dev/null +++ b/.changeset/quick-chairs-breathe.md @@ -0,0 +1,5 @@ +--- +'@voucherify/sdk': minor +--- + +Added support for `v1/customers/{customerId}/activity` (method `listActivity`) and fix type `ValidationValidateStackableResponse` diff --git a/packages/sdk/README.md b/packages/sdk/README.md index 51e58a431..889c1b3da 100644 --- a/packages/sdk/README.md +++ b/packages/sdk/README.md @@ -729,13 +729,19 @@ You can optionally define scrolling cursor based on customer creation date using Keep in mind this operation may drain your API call limits fairly quickly - each api call fetches 100 customers. So if you have 100.000 customers, you will use 1000 API calls. -#### [Update Customer's Consents](https://docs.voucherify.io/reference/update-customers-consents) +#### Update Customer's Consents - Deprecated ```javascript client.customers.updateConsents(customer, consents) ``` -#### [List Customers Activities](https://docs.voucherify.io/reference/get-customer-activities) +#### [List Customer's Activity](https://docs.voucherify.io/reference/list-customer-activity) + +```javascript +client.customers.listActivity(customerIdOrSourceId, params) +``` + +#### List Customers Activities - Deprecated - use listActivity ```javascript client.customers.listActivities(customerId) @@ -768,15 +774,11 @@ client.customers.listRedeemables(id, params) --- -### Consents +### Consents - Deprecated Methods are provided within `client.consents.*` namespace. -- [Get Consents](#get-consents) - -You can [update Customer's consents](#update-customers-consents) in `client.customer.*` namespace. - -#### [Get Consents](https://docs.voucherify.io/reference/get-consents) +#### Get Consents - Deprecated ```javascript client.consents.list() diff --git a/packages/sdk/src/Consents.ts b/packages/sdk/src/Consents.ts index 321160463..6dc659076 100644 --- a/packages/sdk/src/Consents.ts +++ b/packages/sdk/src/Consents.ts @@ -6,7 +6,7 @@ export class Consents { constructor(private client: RequestController) {} /** - * @see https://docs.voucherify.io/reference/get-consents + * @deprecated This method is deprecated. We’re removing this method in next major version. */ public list() { return this.client.get('/consents') diff --git a/packages/sdk/src/Customers.ts b/packages/sdk/src/Customers.ts index 10532257e..13d2db48e 100644 --- a/packages/sdk/src/Customers.ts +++ b/packages/sdk/src/Customers.ts @@ -103,14 +103,22 @@ class Customers { ) } /** - * @see https://docs.voucherify.io/reference/update-customers-consents + * @see https://docs.voucherify.io/reference/list-customer-activity + */ + public listActivity(customerIdOrSourceId: string, params?: T.CustomerActivityListQueryParams) { + return this.client.get( + `/customers/${encode(customerIdOrSourceId)}/activity`, + params, + ) + } + /** + * @deprecated This method is deprecated. We’re removing this method in next major version. */ public updateConsents(idOrSourceId: string, consents: T.CustomersUpdateConsentsBody) { return this.client.put(`/customers/${encode(idOrSourceId)}/consents`, consents) } - /** - * @see https://docs.voucherify.io/reference/get-customer-activities + * @deprecated This method is deprecated in favor of the `listActivity` method. We’re removing this method in next major version. */ public listActivities(customerId: string, params?: T.CustomerActivitiesListQueryParams) { return this.client.get(`/customers/${encode(customerId)}/activities`, params) diff --git a/packages/sdk/src/types/Customers.ts b/packages/sdk/src/types/Customers.ts index d999de33e..5b238cd60 100644 --- a/packages/sdk/src/types/Customers.ts +++ b/packages/sdk/src/types/Customers.ts @@ -107,6 +107,26 @@ export interface CustomersCommonListResponse { has_more?: boolean } +export interface CustomerActivityListQueryParams { + limit?: number //min 1, max 100 + order?: 'created_at' | '-created_at' + starting_after_id?: string + campaign_type?: 'LOYALTY_PROGRAM' | 'PROMOTION' | 'DISCOUNT_COUPONS' | 'GIFT_VOUCHERS' | 'REFERRAL_PROGRAM' + campaign_id?: string + category?: 'ACTION' | 'EFFECT' + type?: string + start_date?: string //ISO format date + end_date?: string //ISO format date +} + +export interface CustomerActivityListResponse { + object: 'list' + data_ref: 'data' + data: Record[] + has_more: boolean + more_starting_after?: string +} + export interface CustomerActivitiesListQueryParams { limit?: number order?: 'created_at' | '-created_at' diff --git a/packages/sdk/src/types/Validations.ts b/packages/sdk/src/types/Validations.ts index b903a4114..bde15666d 100644 --- a/packages/sdk/src/types/Validations.ts +++ b/packages/sdk/src/types/Validations.ts @@ -90,8 +90,8 @@ export interface ValidationValidateStackableResponse { session?: ValidationSessionResponse order?: OrdersCreateResponse redeemables?: StackableRedeemableResponse[] - skipped_redeemables?: StackableRedeemableSkippedResponse - inapplicable_redeemables?: StackableRedeemableInapplicableResponse + skipped_redeemables?: StackableRedeemableSkippedResponse[] + inapplicable_redeemables?: StackableRedeemableInapplicableResponse[] stacking_rules: ValidationsStackingRules } diff --git a/packages/sdk/test/customers.spec.ts b/packages/sdk/test/customers.spec.ts index e9bf94871..87b71ead1 100644 --- a/packages/sdk/test/customers.spec.ts +++ b/packages/sdk/test/customers.spec.ts @@ -6,6 +6,26 @@ import { CustomerRequest, DiscountVouchersTypesEnum, DistributionsPublicationsCr jest.setTimeout(15000) describe('Customers API', () => { + it('should list customer activity of newly created and updated user', async () => { + const customerSourceId = generateRandomString() + await client.customers.create({ source_id: customerSourceId }) //'customer.created' event + await client.customers.update({ source_id: customerSourceId, name: generateRandomString(), metadata: { xxx: 1 } }) //'customer.updated' event + let moreStartingAfterId: string | undefined + do { + const result = await client.customers.listActivity(customerSourceId, { + limit: 1, + starting_after_id: moreStartingAfterId, + }) + result.data.forEach(data => expect(data.data).toBeDefined()) + moreStartingAfterId = result.more_starting_after + if (result.has_more) { + expect(moreStartingAfterId).not.toEqual(undefined) + } else { + expect(moreStartingAfterId).toEqual(undefined) + } + } while (moreStartingAfterId) + }) + it('should import customer via csv file', async () => { const customerSourceId = generateRandomString() await generateCustomerCSV(customerSourceId)