47 lines
1023 B
Go
47 lines
1023 B
Go
package handlers
|
|
|
|
import (
|
|
"log/slog"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func StartDailyCleanup(app *App) {
|
|
loc, _ := time.LoadLocation("Europe/Budapest")
|
|
|
|
go func() {
|
|
for {
|
|
// read finalize_time from DB (default "10:30")
|
|
t := app.getSetting("finalize_time", "10:30")
|
|
|
|
// parse "HH:MM"
|
|
parts := strings.Split(t, ":")
|
|
hour, _ := strconv.Atoi(parts[0])
|
|
minute, _ := strconv.Atoi(parts[1])
|
|
|
|
now := time.Now().In(loc)
|
|
next := time.Date(now.Year(), now.Month(), now.Day(), hour, minute, 0, 0, loc)
|
|
if !next.After(now) {
|
|
next = next.Add(24 * time.Hour)
|
|
}
|
|
|
|
slog.Info("Next finalize scheduled", "time", next)
|
|
|
|
timer := time.NewTimer(time.Until(next))
|
|
|
|
select {
|
|
case <-timer.C:
|
|
if err := finalizeOrders(app); err != nil {
|
|
slog.Error("Daily finalize failed", "error", err)
|
|
} else {
|
|
slog.Info("Orders finalized", "time", time.Now().In(loc))
|
|
}
|
|
case <-app.FinalizeUpdate:
|
|
slog.Info("Finalize time updated, recalculating...")
|
|
timer.Stop()
|
|
}
|
|
}
|
|
}()
|
|
}
|