Skip to content

Commit dbb2b1d

Browse files
authored
Merge pull request #282 from swamphacks/fix/waitlist-trans-prevent-post-event-start
Fix/waitlist trans prevent post event start
2 parents 4c7ab71 + 8e56625 commit dbb2b1d

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

apps/api/cmd/BAT_worker/main.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"fmt"
54
"time"
65

76
"github.com/hibiken/asynq"
@@ -57,9 +56,6 @@ func main() {
5756
},
5857
)
5958

60-
logger.Info().Msg("Debug test")
61-
fmt.Print("Debug test")
62-
6359
schedulerLocation, err := time.LoadLocation("America/New_York")
6460
if err != nil {
6561
panic(err)
@@ -71,10 +67,8 @@ func main() {
7167
},
7268
)
7369

74-
logger.Info().Msg("Debug test")
75-
fmt.Print("Debug test")
76-
7770
taskQueueClient := asynq.NewClient(redisOpt)
71+
defer taskQueueClient.Close()
7872

7973
database := db.NewDB(cfg.DatabaseURL)
8074
defer database.Close()
@@ -92,7 +86,7 @@ func main() {
9286
batService := services.NewBatService(applicationRepo, eventRepo, userRepo, batRunsRepo, emailService, txm, nil, scheduler, logger)
9387
applicationService := services.NewApplicationService(applicationRepo, userRepo, eventService, emailService, txm, nil, nil, scheduler, logger)
9488

95-
BATWorker := workers.NewBATWorker(batService, applicationService, scheduler, taskQueueClient, logger)
89+
BATWorker := workers.NewBATWorker(batService, applicationService, eventService, scheduler, taskQueueClient, logger)
9690

9791
mux := asynq.NewServeMux()
9892
mux.HandleFunc(tasks.TypeCalculateAdmissions, BATWorker.HandleCalculateAdmissionsTask)

apps/api/internal/services/application.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package services
33
import (
44
"context"
55
"errors"
6+
"time"
67

78
"github.com/google/uuid"
89
"github.com/hibiken/asynq"
@@ -21,6 +22,7 @@ var (
2122
ErrGetApplicationStatistics = errors.New("failed to aggregate application stats")
2223
ErrMismatchedReviewerCounts = errors.New("the total number of applications does not match the total number of assigned reviews")
2324
ErrWrongReviewerAssignment = errors.New("an application has been assigned to a reviewer who is not authorized to review it")
25+
ErrEventAlreadyStarted = errors.New("the event has already started")
2426
)
2527

2628
// TODO: figure out a way to create the submission fields dynamically using the json form files with proper validation.
@@ -94,7 +96,7 @@ func NewApplicationService(appRepo *repository.ApplicationRepository, userRepo *
9496
buckets: buckets,
9597
txm: txm,
9698
scheduler: scheduler,
97-
logger: logger,
99+
logger: logger.With().Str("component", "applicationService").Logger(),
98100
}
99101
}
100102

@@ -595,7 +597,19 @@ func (s *ApplicationService) AcceptApplicationAcceptance(ctx context.Context, us
595597

596598
func (s *ApplicationService) TransitionWaitlistedApplications(ctx context.Context, eventId uuid.UUID, acceptanceCount uint32, acceptanceQuota uint32) error {
597599
var acceptedUserIds []uuid.UUID
598-
err := s.txm.WithTx(ctx, func(tx pgx.Tx) error {
600+
601+
event, err := s.eventsService.GetEventByID(ctx, eventId)
602+
if err != nil {
603+
s.logger.Err(err).Msg(err.Error())
604+
return err
605+
}
606+
currentTime := time.Now()
607+
if currentTime.After(event.StartTime) {
608+
s.logger.Err(ErrEventAlreadyStarted).Msg("Could not transition waitlisted applications: the event has already started.")
609+
return ErrEventAlreadyStarted
610+
}
611+
612+
err = s.txm.WithTx(ctx, func(tx pgx.Tx) error {
599613
txAppRepo := s.appRepo.NewTx(tx)
600614

601615
err := txAppRepo.TransitionAcceptedApplicationsToWaitlistByEventID(ctx, eventId)

apps/api/internal/workers/bat.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package workers
33
import (
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 (
2228
type 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

Comments
 (0)