46c8edfa82
Builds the per-user daily-at-03:00-local scheduler for #392 Half B. Uses github.com/go-co-op/gocron/v2 with WithLocation(userTZ) for each user's job. Hourly reconciliation pass keeps the in-memory job set in sync with the active-users query. Start sequence: clear stale in_flight rows; register a daily job for every active user at their stored timezone; fire a one-shot runOnce to catch up missed schedules during downtime; start gocron. Stop drains and shuts down the gocron loop. Refresh(ctx, userID) removes the user's existing job (if any) and registers a fresh one at their current timezone — wired into the PUT /api/me/timezone handler and new-user registration in the next commit. Server struct gains PlaylistScheduler; main.go constructs it after the eventbus and threads it through to api.Mount. The existing StartSystemPlaylistCron call stays for one more commit so we don't have a window where no scheduler is running; Task 3 deletes it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
33 lines
1.1 KiB
Modula-2
33 lines
1.1 KiB
Modula-2
module git.fabledsword.com/bvandeusen/minstrel
|
|
|
|
go 1.23.0
|
|
|
|
require (
|
|
github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8
|
|
github.com/go-chi/chi/v5 v5.2.5
|
|
github.com/go-co-op/gocron/v2 v2.21.2
|
|
github.com/golang-migrate/migrate/v4 v4.18.2
|
|
github.com/google/uuid v1.6.0
|
|
github.com/jackc/pgerrcode v0.0.0-20220416144525-469b46aa5efa
|
|
github.com/jackc/pgx/v5 v5.7.4
|
|
github.com/stretchr/testify v1.11.1
|
|
golang.org/x/crypto v0.35.0
|
|
gopkg.in/yaml.v3 v3.0.1
|
|
)
|
|
|
|
require (
|
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
|
github.com/jackc/puddle/v2 v2.2.2 // indirect
|
|
github.com/jonboulle/clockwork v0.5.0 // indirect
|
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
|
github.com/robfig/cron/v3 v3.0.1 // indirect
|
|
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
|
go.uber.org/atomic v1.7.0 // indirect
|
|
golang.org/x/sync v0.11.0 // indirect
|
|
golang.org/x/text v0.22.0 // indirect
|
|
)
|