@@ -3,6 +3,8 @@ package workers
33import (
44 "context"
55 "encoding/json"
6+ "errors"
7+ "time"
68
79 "github.com/hibiken/asynq"
810 "github.com/rs/zerolog"
@@ -12,6 +14,10 @@ import (
1214 "github.com/swamphacks/core/apps/api/internal/tasks"
1315)
1416
17+ var (
18+ ErrEventAlreadyStarted = errors .New ("the event has already started" )
19+ )
20+
1521// BAT Worker
1622// The BAT worker runs the background execution pipeline for our
1723// Balanced Admissions Thresher (BAT). This worker processes
@@ -22,15 +28,17 @@ import (
2228type BATWorker struct {
2329 batService * services.BatService
2430 applicationService * services.ApplicationService
31+ eventService * services.EventService
2532 scheduler * asynq.Scheduler
2633 taskQueue * asynq.Client
2734 logger zerolog.Logger
2835}
2936
30- func NewBATWorker (batService * services.BatService , applicationService * services.ApplicationService , scheduler * asynq.Scheduler , taskQueue * asynq.Client , logger zerolog.Logger ) * BATWorker {
37+ func NewBATWorker (batService * services.BatService , applicationService * services.ApplicationService , eventService * services. EventService , scheduler * asynq.Scheduler , taskQueue * asynq.Client , logger zerolog.Logger ) * BATWorker {
3138 return & BATWorker {
3239 batService : batService ,
3340 applicationService : applicationService ,
41+ eventService : eventService ,
3442 logger : logger .With ().Str ("worker" , "BATWorker" ).Str ("component" , "BAT" ).Logger (),
3543 scheduler : scheduler ,
3644 taskQueue : taskQueue ,
@@ -72,6 +80,18 @@ func (w *BATWorker) HandleScheduleTransitionWaitlistTask(ctx context.Context, t
7280 return err
7381 }
7482
83+ // Get event start date, error if past the start of the event.
84+ event , err := w .eventService .GetEventByID (ctx , payload .EventID )
85+ if err != nil {
86+ w .logger .Err (err ).Msg (err .Error ())
87+ return err
88+ }
89+ currentTime := time .Now ()
90+ if currentTime .After (event .StartTime ) {
91+ w .logger .Err (ErrEventAlreadyStarted ).Msg ("Could not transition waitlisted applications: the event has already started." )
92+ return ErrEventAlreadyStarted
93+ }
94+
7595 cfg := config .Load ()
7696 task , err := tasks .NewTaskTransitionWaitlist (tasks.TransitionWaitlistPayload {
7797 EventID : payload .EventID ,
0 commit comments