Skip to content

Commit

Permalink
add snooze to reservation reminder notification
Browse files Browse the repository at this point in the history
  • Loading branch information
Petter Andersson committed Sep 24, 2024
1 parent d01b814 commit a01fa5e
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ describe('notifyReservedClaims', () => {
user,
'advert-123',
10,
0,
new Date('2023-06-01T00:00:00.000Z')
)
expect(adverts['advert-123'].claims[0].events).toMatchObject([
Expand Down Expand Up @@ -66,6 +67,7 @@ describe('notifyReservedClaims', () => {
user,
'advert-123',
10,
0,
new Date('2023-05-20T00:00:00.000Z')
)

Expand All @@ -80,7 +82,7 @@ describe('notifyReservedClaims', () => {
},
])
}))
it('should return null when no claim is reminder is sent)', () =>
it('should return null when no claim reminder is sent)', () =>
end2endTest({}, async ({ user, adverts, services }) => {
// eslint-disable-next-line no-param-reassign
adverts['advert-123'] = {
Expand All @@ -104,8 +106,40 @@ describe('notifyReservedClaims', () => {
user,
'advert-123',
1,
0,
new Date('2023-05-03T00:00:00.000Z')
)
expect(result.advert).toBeNull()
}))
})

it('should snooze an event when advert not picked)', () =>
end2endTest({}, async ({ user, adverts, services }) => {
// eslint-disable-next-line no-param-reassign
adverts['advert-123'] = {
...createEmptyAdvert(),
id: 'advert-123',
createdBy: user.id,
pickedAt: '',
quantity: 50,
claims: [
{
by: user.id,
at: '2023-05-01T00:00:00.000Z',
quantity: 2,
type: AdvertClaimType.reserved,
events: [],
},
],
}
const notifyAdvertClaim = createReservedClaimsNotifier(services)

await notifyAdvertClaim(
user,
'advert-123',
10,
1,
new Date('2023-06-01T00:00:00.000Z')
)
expect(adverts['advert-123'].claims[0].events).toMatchObject([])
}))
9 changes: 7 additions & 2 deletions src/adverts/advert-mutations/claims/notify-reserved-claims.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Severity } from '../../../syslog/types'
import { txBuilder } from '../../../transactions'
import type { Services } from '../../../types'
import { normalizeAdvertClaims } from '../../advert-claims'
import { getAdvertMeta } from '../../advert-meta'
import {
type Advert,
type AdvertMutations,
Expand All @@ -20,13 +21,17 @@ export const createReservedClaimsNotifier =
Services,
'adverts' | 'notifications' | 'syslog'
>): AdvertMutations['notifyReservedClaims'] =>
(user, id, interval, now) =>
(user, id, interval, snooze, now) =>
txBuilder<Advert>()
.load(() => adverts.getAdvert(user, id))
.validate(() => undefined)
.patch((advert, { actions }) => {
let isModified = false
const meta = getAdvertMeta(advert, user, now)
if (snooze === 1 && !meta.isPicked) {
return null
}

let isModified = false
const claims = advert.claims.map(c => {
// Check the claim reserved status
// =====================================
Expand Down
1 change: 1 addition & 0 deletions src/adverts/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ export interface AdvertMutations {
user: HaffaUser,
id: string,
interval: number,
snooze: number,
now: Date
) => Promise<AdvertMutationResult>
notifyExpiredClaims: (
Expand Down
1 change: 1 addition & 0 deletions src/jobs/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { Severity } from '../syslog/types'
const parameters: JobParameters = {
maxReservationDays: 10,
reminderFrequency: 5,
reminderSnoozeUntilPicked: 0,
syslogRetentionDays: 2,
}

Expand Down
3 changes: 3 additions & 0 deletions src/jobs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ export const createJobExecutorServiceFromEnv = (
reminderFrequency: Number(
getEnv('REMINDER_FREQUENCY_DAYS', { fallback: '3' })
),
reminderSnoozeUntilPicked: Number(
getEnv('REMINDER_SNOOZE_UNTIL_PICKED', { fallback: '0' })
),
syslogRetentionDays: Number(
getEnv('SYSLOG_RETENTION_DAYS', { fallback: '10' })
),
Expand Down
10 changes: 8 additions & 2 deletions src/jobs/runners/send-reservation-reminder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import type { TaskRunnerSignature } from '../types'

export const sendReservationReminder: TaskRunnerSignature = async (
services,
{ reminderFrequency },
{ reminderFrequency, reminderSnoozeUntilPicked },
user
) => {
const mutations = createAdvertMutations(services as Services)
Expand All @@ -18,7 +18,13 @@ export const sendReservationReminder: TaskRunnerSignature = async (
async (p, c) =>
p.then(res =>
mutations
.notifyReservedClaims(user, c, reminderFrequency, new Date())
.notifyReservedClaims(
user,
c,
reminderFrequency,
reminderSnoozeUntilPicked,
new Date()
)
.then(ver => (ver.advert ? res + 1 : res))
),
Promise.resolve(0)
Expand Down
1 change: 1 addition & 0 deletions src/jobs/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export type TaskRunnerSignature = (
export interface JobParameters {
maxReservationDays: number
reminderFrequency: number
reminderSnoozeUntilPicked: number
syslogRetentionDays: number
}
export type TaskList = { [key: string]: TaskListItem[] }
Expand Down

0 comments on commit a01fa5e

Please sign in to comment.