Skip to content

Commit

Permalink
Support for new endpoints: List Member Activity
Browse files Browse the repository at this point in the history
  • Loading branch information
p-zielinski committed Oct 16, 2024
1 parent 4ea5fbb commit 94153fb
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 9 deletions.
5 changes: 5 additions & 0 deletions .changeset/five-dancers-fetch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@voucherify/sdk': minor
---

Support for new endpoints: List Member Activity
15 changes: 13 additions & 2 deletions packages/sdk/src/Loyalties.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,19 @@ export class Loyalties {
)
}
/**
* @see https://docs.voucherify.io/reference/get-member-activities
* @see https://docs.voucherify.io/reference/get-member-activities-1
* @see https://docs.voucherify.io/reference/list-member-activity
* @see https://docs.voucherify.io/reference/list-member-activity-1
*/
public listMemberActivity(campaignId: string | null, memberId: string, params?: T.LoyaltiesListMemberActivityParams) {
return this.client.get<T.LoyaltiesListMemberActivityResponse>(
campaignId
? `/loyalties/${encode(campaignId)}/members/${memberId}/activity`
: `/loyalties/members/${memberId}/activity`,
params,
)
}
/**
* @deprecated This method is deprecated in favor of the `listMemberActivity` method. We’re removing this method in next major version.
*/
public getMemberActivities(campaignId: string | null, memberId: string) {
return this.client.get<T.LoyaltiesGetMemberActivitiesResponse>(
Expand Down
29 changes: 26 additions & 3 deletions packages/sdk/src/types/Loyalties.ts
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,26 @@ export type LoyaltiesCreateMemberResponse = LoyaltiesVoucherResponse

export type LoyaltiesGetMemberResponse = LoyaltiesCreateMemberResponse

export type LoyaltiesListMemberActivityParams = {
order?: 'created_at' | '-created_at'
starting_after_id?: string
limit?: number //max 100
}

export type LoyaltiesListMemberActivityResponse = {
object: 'list'
data_ref: 'data'
data: {
id: string
type: string
data: any
created_at: string
group_id: string
}[]
has_more: boolean
more_starting_after?: string
}

export interface LoyaltiesGetMemberActivitiesResponse {
object: 'list'
data_ref: 'activities'
Expand Down Expand Up @@ -712,9 +732,11 @@ export interface LoyaltiesGetPointsExpirationResponseBody {
total: number
}

export interface LoyaltiesListCardTransactionsRequestQuery {
limit?: number
page?: number
export interface LoyaltiesListCardTransactionsResponseBody {
object: 'list'
data_ref: 'data'
data: LoyaltyCardTransaction[]
has_more: boolean
}

export type LoyaltiesExportCardTransactionsResponseBody = VouchersExportTransactionsResponseBody
Expand Down Expand Up @@ -904,6 +926,7 @@ export interface LoyaltyCardTransaction {
type: 'loyalty_card'
total: number
object: 'balance'
operation_type: 'MANUAL' | 'AUTOMATIC'
points: number
balance: number
related_object: {
Expand Down
13 changes: 10 additions & 3 deletions packages/sdk/test/loyalties.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ describe('Loyalties API', () => {
} as LoyaltiesAddPointsResponse)
})

it('Should list members activities', async () => {
it('Should list member transactions', async () => {
const memberCardTransactions = await client.loyalties.listCardTransactions(loyaltiesMember.code, null)
expect(memberCardTransactions).toEqual({
object: 'list',
Expand All @@ -174,14 +174,15 @@ describe('Loyalties API', () => {
reason: null,
type: 'POINTS_ADDITION',
details: {
balance: expect.objectContaining({
balance: {
type: 'loyalty_card',
total: startBalance + addPoints,
operation_type: 'MANUAL',
object: 'balance',
points: addPoints,
balance: startBalance + addPoints,
related_object: { id: expect.stringMatching(/^v_.*/), type: 'voucher' },
}),
},
},
related_transaction_id: null,
created_at: expect.stringMatching(isoRegex),
Expand All @@ -192,6 +193,12 @@ describe('Loyalties API', () => {
} as LoyaltiesListCardTransactionsResponseBody)
})

it('Should list member activity', async () => {
const listMemberActivityResponse = await client.loyalties.listMemberActivity(null, loyaltiesMember.code)
expect(listMemberActivityResponse.data.length).toBeGreaterThan(0)
expect(typeof listMemberActivityResponse.data[0].type).toEqual('string')
})

it('Should generate and update campaign stack', async () => {
const campaign = await client.campaigns.create({
campaign_type: 'PROMOTION',
Expand Down
2 changes: 1 addition & 1 deletion packages/sdk/test/vouchers.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ describe('Vouchers API', () => {
}
})
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 () => {
const code = (await generateGiftVoucher()).code
const { code } = await generateGiftVoucher()
const response = await client.vouchers.exportTransactions(code, { parameters: {} })
expect(typeof response.parameters.filters).toBe('object')
expect(response.parameters).not.toContain('order')
Expand Down

0 comments on commit 94153fb

Please sign in to comment.