st-agent-worker/sync.go
2026-09-10 00:21:04 +02:00

46 lines
931 B
Go

package main
import (
"context"
"errors"
"log"
"time"
)
func (s *Server) SyncRoster(ctx context.Context) error {
client, ok := s.st.(*Client)
if !ok {
return errors.New("sync requires a real client")
}
since, err := s.store.LastSync()
if err != nil {
return err
}
// Take the timestamp before fetching, so anything modified mid-sync
// is picked up next time rather than skipped.
started := time.Now().Unix()
users, err := client.ListUsers(ctx, since)
if err != nil {
return err
}
if err := s.store.UpsertPeople(users, s.eligible); err != nil {
return err
}
noDept := 0
for _, u := range users {
if u.Eligible(s.eligible) && normalizeDept(u.Department) == "" {
noDept++
}
}
if noDept > 0 {
log.Printf("%d eligible users synced with no department; they cannot be assigned", noDept)
}
log.Printf("synced %d users (since=%d)", len(users), since)
return s.store.SetLastSync(started)
}