Browse Source

Fix(booking-job): Ensures triggerFuturePageRefresh is cancelled

master
Samuel Pua 3 years ago
parent
commit
190f1f88cb
  1. 23
      backend/internal/ktmtrainbot/backgroundbookingjob.go

23
backend/internal/ktmtrainbot/backgroundbookingjob.go

@ -106,13 +106,13 @@ func (env *Env) BackgroundJobRunner() {
if success {
jobToDo.Status = "success"
env.DB.Save(&jobToDo)
fmt.Println("Successfully made a booking.")
log.Println("Successfully made a booking.")
} else {
// Sleep for 10 minutes before setting status to pending
time.Sleep(10 * time.Minute)
jobToDo.Status = "pending"
env.DB.Save(&jobToDo)
fmt.Println("Failed to make a booking.")
log.Println("Failed to make a booking.")
}
}()
jobToDo.Status = "running"
@ -296,13 +296,6 @@ func (env *Env) startBooking(job *Booking, username string, password string, cre
}
func chooseAndMakePayment(timerCtx context.Context, creditCardType, creditCard, creditCardCVV, creditCardExpiry string, browser *rod.Browser, page *rod.Page) bool {
defer func() {
if r := recover(); r != nil {
log.Println("Recovering from chooseAndMakePayment panic...")
chooseAndMakePayment(timerCtx, creditCardType, creditCard, creditCardCVV, creditCardExpiry, browser, page)
}
}()
// Exits if context cancelled
select {
case <-timerCtx.Done():
@ -311,7 +304,15 @@ func chooseAndMakePayment(timerCtx context.Context, creditCardType, creditCard,
default:
}
go triggerFuturePageRefresh(page)
cancelRefresh := triggerFuturePageRefresh(page)
defer func() {
if r := recover(); r != nil {
log.Println("Recovering from chooseAndMakePayment panic...")
cancelRefresh()
chooseAndMakePayment(timerCtx, creditCardType, creditCard, creditCardCVV, creditCardExpiry, browser, page)
}
}()
if strings.ToUpper(creditCardType) == "VISA" || strings.ToUpper(creditCardType) == "MASTERCARD" {
log.Println("Credit card payment method chosen.")
@ -356,6 +357,7 @@ func chooseAndMakePayment(timerCtx context.Context, creditCardType, creditCard,
log.Println("KTM wallet payment made.")
}
cancelRefresh()
return true
}
@ -629,6 +631,7 @@ func triggerFuturePageRefresh(page *rod.Page) func() {
return
// Reload page after 9 minutes
case <-time.After(540 * time.Second):
log.Println("Reloading page")
page.MustReload()
}
}()

Loading…
Cancel
Save