Skip to content

Commit deb0b79

Browse files
authored
Support for new endpoints: List Member Activity (#282)
* Support for new endpoints: List Member Activity * requested changes
1 parent 4ea5fbb commit deb0b79

File tree

5 files changed

+60
-11
lines changed

5 files changed

+60
-11
lines changed

.changeset/five-dancers-fetch.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@voucherify/sdk': minor
3+
---
4+
5+
Support for new endpoints: List Member Activity

packages/sdk/src/Loyalties.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,19 @@ export class Loyalties {
158158
)
159159
}
160160
/**
161-
* @see https://docs.voucherify.io/reference/get-member-activities
162-
* @see https://docs.voucherify.io/reference/get-member-activities-1
161+
* @see https://docs.voucherify.io/reference/list-member-activity
162+
* @see https://docs.voucherify.io/reference/list-member-activity-1
163+
*/
164+
public listMemberActivity(campaignId: string | null, memberId: string, params?: T.LoyaltiesListMemberActivityParams) {
165+
return this.client.get<T.LoyaltiesListMemberActivityResponse>(
166+
campaignId
167+
? `/loyalties/${encode(campaignId)}/members/${memberId}/activity`
168+
: `/loyalties/members/${memberId}/activity`,
169+
params,
170+
)
171+
}
172+
/**
173+
* @deprecated This method is deprecated in favor of the `listMemberActivity` method. We’re removing this method in next major version.
163174
*/
164175
public getMemberActivities(campaignId: string | null, memberId: string) {
165176
return this.client.get<T.LoyaltiesGetMemberActivitiesResponse>(

packages/sdk/src/types/Loyalties.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,26 @@ export type LoyaltiesCreateMemberResponse = LoyaltiesVoucherResponse
320320

321321
export type LoyaltiesGetMemberResponse = LoyaltiesCreateMemberResponse
322322

323+
export type LoyaltiesListMemberActivityParams = {
324+
order?: 'created_at' | '-created_at'
325+
starting_after_id?: string
326+
limit?: number //max 100
327+
}
328+
329+
export type LoyaltiesListMemberActivityResponse = {
330+
object: 'list'
331+
data_ref: 'data'
332+
data: {
333+
id: string
334+
type: string
335+
data: any
336+
created_at: string
337+
group_id: string
338+
}[]
339+
has_more: boolean
340+
more_starting_after?: string
341+
}
342+
323343
export interface LoyaltiesGetMemberActivitiesResponse {
324344
object: 'list'
325345
data_ref: 'activities'
@@ -712,11 +732,6 @@ export interface LoyaltiesGetPointsExpirationResponseBody {
712732
total: number
713733
}
714734

715-
export interface LoyaltiesListCardTransactionsRequestQuery {
716-
limit?: number
717-
page?: number
718-
}
719-
720735
export type LoyaltiesExportCardTransactionsResponseBody = VouchersExportTransactionsResponseBody
721736

722737
export interface LoyaltiesAddOrRemoveCardBalanceRequestBody {
@@ -904,6 +919,7 @@ export interface LoyaltyCardTransaction {
904919
type: 'loyalty_card'
905920
total: number
906921
object: 'balance'
922+
operation_type: 'MANUAL' | 'AUTOMATIC'
907923
points: number
908924
balance: number
909925
related_object: {

packages/sdk/test/loyalties.spec.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ describe('Loyalties API', () => {
159159
} as LoyaltiesAddPointsResponse)
160160
})
161161

162-
it('Should list members activities', async () => {
162+
it('Should list member transactions', async () => {
163163
const memberCardTransactions = await client.loyalties.listCardTransactions(loyaltiesMember.code, null)
164164
expect(memberCardTransactions).toEqual({
165165
object: 'list',
@@ -174,14 +174,15 @@ describe('Loyalties API', () => {
174174
reason: null,
175175
type: 'POINTS_ADDITION',
176176
details: {
177-
balance: expect.objectContaining({
177+
balance: {
178178
type: 'loyalty_card',
179179
total: startBalance + addPoints,
180+
operation_type: 'MANUAL',
180181
object: 'balance',
181182
points: addPoints,
182183
balance: startBalance + addPoints,
183184
related_object: { id: expect.stringMatching(/^v_.*/), type: 'voucher' },
184-
}),
185+
},
185186
},
186187
related_transaction_id: null,
187188
created_at: expect.stringMatching(isoRegex),
@@ -192,6 +193,22 @@ describe('Loyalties API', () => {
192193
} as LoyaltiesListCardTransactionsResponseBody)
193194
})
194195

196+
it('Should list member activity', async () => {
197+
const listMemberActivityResponse = await client.loyalties.listMemberActivity(null, loyaltiesMember.code, {
198+
limit: 1,
199+
})
200+
expect(listMemberActivityResponse).toEqual(
201+
expect.objectContaining({
202+
object: 'list',
203+
data_ref: 'data',
204+
has_more: true,
205+
more_starting_after: expect.stringMatching(/.*/),
206+
}),
207+
)
208+
expect(listMemberActivityResponse.data.length).toEqual(1)
209+
expect(typeof listMemberActivityResponse.data[0].type).toEqual('string')
210+
})
211+
195212
it('Should generate and update campaign stack', async () => {
196213
const campaign = await client.campaigns.create({
197214
campaign_type: 'PROMOTION',

packages/sdk/test/vouchers.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe('Vouchers API', () => {
5252
}
5353
})
5454
it('should return all the required fields, the `filters` object and should not return `order` and `fields` if they were not passed in request body', async () => {
55-
const code = (await generateGiftVoucher()).code
55+
const { code } = await generateGiftVoucher()
5656
const response = await client.vouchers.exportTransactions(code, { parameters: {} })
5757
expect(typeof response.parameters.filters).toBe('object')
5858
expect(response.parameters).not.toContain('order')

0 commit comments

Comments
 (0)