Expanding the reservations job payload to dictate if it should run in speedy mode or not as waiting lists are actually hindered by speedy mode
This commit is contained in:
parent
d4eb34057c
commit
0a3e712838
6 changed files with 25 additions and 11 deletions
|
|
@ -1,7 +1,13 @@
|
||||||
import type { Queue } from 'bull'
|
import type { Job, Queue } from 'bull'
|
||||||
|
|
||||||
import type { Reservation } from './entity'
|
import type { Reservation } from './entity'
|
||||||
|
|
||||||
export const RESERVATIONS_QUEUE_NAME = 'reservations'
|
export const RESERVATIONS_QUEUE_NAME = 'reservations'
|
||||||
|
|
||||||
export type ReservationsQueue = Queue<Reservation>
|
interface ReservationsQueueJobPayload {
|
||||||
|
reservation: Reservation
|
||||||
|
speedyMode: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ReservationsQueue = Queue<ReservationsQueueJobPayload>
|
||||||
|
export type ReservationsJob = Job<ReservationsQueueJobPayload>
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ export class ReservationsController {
|
||||||
return 'Reservation saved'
|
return 'Reservation saved'
|
||||||
}
|
}
|
||||||
this.loggerService.debug('Reservation is available for reservation')
|
this.loggerService.debug('Reservation is available for reservation')
|
||||||
await this.reservationsQueue.add(reservation)
|
await this.reservationsQueue.add({ reservation, speedyMode: true })
|
||||||
return 'Reservation queued'
|
return 'Reservation queued'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -132,7 +132,7 @@ export class ReservationsController {
|
||||||
if (!reservation.isAvailableForReservation())
|
if (!reservation.isAvailableForReservation())
|
||||||
throw new HttpException('Not available', 400)
|
throw new HttpException('Not available', 400)
|
||||||
|
|
||||||
await this.reservationsQueue.add(reservation)
|
await this.reservationsQueue.add({ reservation, speedyMode: true })
|
||||||
return 'Reservation queued'
|
return 'Reservation queued'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ export class ReservationsCronService {
|
||||||
this.loggerService.debug(`It's go-time`)
|
this.loggerService.debug(`It's go-time`)
|
||||||
await this.reservationsQueue.addBulk(
|
await this.reservationsQueue.addBulk(
|
||||||
reservationsToPerform.map((res) => ({
|
reservationsToPerform.map((res) => ({
|
||||||
data: res,
|
data: { reservation: res, speedyMode: true },
|
||||||
opts: { attempts: DAILY_RESERVATIONS_ATTEMPTS },
|
opts: { attempts: DAILY_RESERVATIONS_ATTEMPTS },
|
||||||
})),
|
})),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import {
|
||||||
BaanReserverenService,
|
BaanReserverenService,
|
||||||
NoCourtAvailableError,
|
NoCourtAvailableError,
|
||||||
} from '../runner/baanreserveren/service'
|
} from '../runner/baanreserveren/service'
|
||||||
import { RESERVATIONS_QUEUE_NAME } from './config'
|
import { RESERVATIONS_QUEUE_NAME, ReservationsJob } from './config'
|
||||||
import { DAILY_RESERVATIONS_ATTEMPTS } from './cron'
|
import { DAILY_RESERVATIONS_ATTEMPTS } from './cron'
|
||||||
import { Reservation } from './entity'
|
import { Reservation } from './entity'
|
||||||
import { ReservationsService } from './service'
|
import { ReservationsService } from './service'
|
||||||
|
|
@ -31,8 +31,8 @@ export class ReservationsWorker {
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@Process()
|
@Process()
|
||||||
async handleReservationJob(job: Job<Reservation>) {
|
async handleReservationJob(job: ReservationsJob) {
|
||||||
const reservation = plainToInstance(Reservation, job.data, {
|
const reservation = plainToInstance(Reservation, job.data.reservation, {
|
||||||
groups: ['password'],
|
groups: ['password'],
|
||||||
})
|
})
|
||||||
this.loggerService.log('Handling reservation', {
|
this.loggerService.log('Handling reservation', {
|
||||||
|
|
@ -43,7 +43,12 @@ export class ReservationsWorker {
|
||||||
reservation.dateRangeStart,
|
reservation.dateRangeStart,
|
||||||
reservation.dateRangeEnd,
|
reservation.dateRangeEnd,
|
||||||
)
|
)
|
||||||
await this.performReservation(reservation, job.attemptsMade, true, true)
|
await this.performReservation(
|
||||||
|
reservation,
|
||||||
|
job.attemptsMade,
|
||||||
|
true,
|
||||||
|
job.data.speedyMode,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handleReservationErrors(
|
private async handleReservationErrors(
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,10 @@ export class WaitingListService {
|
||||||
)
|
)
|
||||||
|
|
||||||
await this.reservationsQueue.addBulk(
|
await this.reservationsQueue.addBulk(
|
||||||
reservations.map((r) => ({ data: r, opts: { attempts: 1 } })),
|
reservations.map((r) => ({
|
||||||
|
data: { reservation: r, speedyMode: false },
|
||||||
|
opts: { attempts: 1 },
|
||||||
|
})),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ describe('reservations.cron', () => {
|
||||||
it('should perform reservations', () => {
|
it('should perform reservations', () => {
|
||||||
expect(reservationsQueueSpy).toHaveBeenCalledWith([
|
expect(reservationsQueueSpy).toHaveBeenCalledWith([
|
||||||
{
|
{
|
||||||
data: stubbedReservation,
|
data: { reservation: stubbedReservation, speedyMode: true },
|
||||||
opts: { attempts: DAILY_RESERVATIONS_ATTEMPTS },
|
opts: { attempts: DAILY_RESERVATIONS_ATTEMPTS },
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue