2021-11-24 15:38:58 +01:00
|
|
|
import { Handler } from 'aws-lambda'
|
2021-11-27 13:11:09 +01:00
|
|
|
import { Dayjs } from 'dayjs'
|
2021-11-24 15:38:58 +01:00
|
|
|
|
|
|
|
|
import { InputEvent } from '../stepFunctions/event'
|
|
|
|
|
import { Reservation } from '../common/reservation'
|
2021-11-27 13:11:09 +01:00
|
|
|
import { validateRequest, ReservationRequest } from '../common/request'
|
|
|
|
|
import { scheduleDateToRequestReservation } from '../common/schedule'
|
|
|
|
|
|
|
|
|
|
export interface ScheduledReservationRequest {
|
|
|
|
|
reservationRequest: ReservationRequest
|
|
|
|
|
availableAt: Dayjs
|
|
|
|
|
}
|
2021-11-24 15:38:58 +01:00
|
|
|
|
|
|
|
|
export const run: Handler<InputEvent, void> = async (input: InputEvent): Promise<void> => {
|
|
|
|
|
console.log(`Handling event: ${input}`)
|
2021-11-27 13:11:09 +01:00
|
|
|
const reservationRequest = validateRequest(JSON.stringify(input.reservationRequest))
|
2021-11-24 15:38:58 +01:00
|
|
|
console.log('Successfully validated request')
|
|
|
|
|
|
2021-11-27 13:11:09 +01:00
|
|
|
const res = new Reservation(reservationRequest.dateRange, reservationRequest.opponent)
|
|
|
|
|
if (!res.isAvailableForReservation()) {
|
|
|
|
|
console.log('Reservation date is more than 7 days away; scheduling for later')
|
|
|
|
|
scheduleDateToRequestReservation(reservationRequest.dateRange.start)
|
|
|
|
|
}
|
2021-11-24 15:38:58 +01:00
|
|
|
}
|