diff --git a/reconcile.go b/reconcile.go new file mode 100644 index 0000000..ba4f0e4 --- /dev/null +++ b/reconcile.go @@ -0,0 +1,41 @@ +package main + +import ( + "context" + "log" +) + +func (s *Server) reconcile(ctx context.Context, runID int64, rep *User, dept string) error { + reps, err := s.store.RepsFor(rep.ChapterID, dept) + if err != nil { + return err + } + if len(reps) == 0 { + // Shouldn't happen: the webhook fired for a rep in this department. + log.Printf("run %d: no reps found for chapter %d dept %q", runID, rep.ChapterID, dept) + return nil + } + if len(reps) > 1 { + log.Printf("WARNING: run %d: %d reps for chapter %d dept %q; assigning all to %d (fill-only mode)", + runID, len(reps), rep.ChapterID, dept, reps[0]) + } + agent := reps[0] + + members, err := s.store.EligibleMembers(rep.ChapterID, dept) + if err != nil { + return err + } + + assigned, skipped := 0, 0 + for _, m := range members { + // ... ActiveAgent check, AssignAgent or skip + } + + if assigned == 0 && skipped > 0 { + log.Printf("WARNING: run %d: assigned nobody; all %d members already have agents", + runID, skipped) + } + log.Printf("run %d: %d assigned, %d skipped, dept %q chapter %d", + runID, assigned, skipped, dept, rep.ChapterID) + return nil +} diff --git a/server.go b/server.go index 073fc42..ef3fadb 100644 --- a/server.go +++ b/server.go @@ -189,12 +189,6 @@ func (s *Server) handleWebhook(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) } -// reconcile is stubbed until piece 3 lands. -func (s *Server) reconcile(ctx context.Context, runID int64, rep *User, dept string) error { - log.Printf("run %d: would reconcile dept %q for rep %d", runID, dept, rep.ID) - return nil -} - // ST doesn't support setting headers so we use the URL func (s *Server) validSecret(r *http.Request) bool {