// endpoints contains all http endpoints // for more complex endpoints the *Handler function is executed first // by the main programm and it will then run other functions as needed // // the filenames represent the route/url for the given endpoint // when "-" is a "/" so this file is server at "/auto/feiertage" package endpoints // this endpoint will be called by crontab and generates the public holidays for a given year // after that manually added holidays with a "wiederholen" flag are copied over to the new year import ( "arbeitszeitmessung/helper/paramParser" "arbeitszeitmessung/models" "log/slog" "net/http" "time" "github.com/wlbr/feiertage" ) func FeiertagsHandler(w http.ResponseWriter, r *http.Request) { pp := paramParser.New(r.URL.Query()) slog.Debug("Generating Holidays") from := pp.ParseTimestampFallback("from", "2006", time.Now().AddDate(-1, 0, -time.Now().YearDay())) to := pp.ParseTimestampFallback("to", "2006", time.Now().AddDate(0, 0, -time.Now().YearDay()+1)) var publicHolidays map[string]models.PublicHoliday = make(map[string]models.PublicHoliday) yearDelta := to.Year() - from.Year() var holidays = feiertage.Sachsen(to.Year(), true) for _, f := range holidays.Feiertage { publicHolidays[f.Time.Format(time.DateOnly)] = models.NewHolidayFromFeiertag(f) } repeatingHolidays, err := models.GetRepeatingHolidays(from, to.AddDate(0, 0, -1)) if err != nil { slog.Warn("Error getting holidays", slog.Any("Error", err)) } slog.Debug("Found repeating Holidays", "num", len(repeatingHolidays), "from", from, "to", to, "yeardelta", yearDelta) for _, day := range repeatingHolidays { day.Time = day.Time.AddDate(yearDelta, 0, 0) publicHolidays[day.Date().Format(time.DateOnly)] = day } slog.Debug("Added repeating holidays", "num", len(holidays.Feiertage)) for _, feiertag := range publicHolidays { slog.Debug("Found holiday", "holiday", feiertag) if err := feiertag.Insert(); err != nil { slog.Warn("Error inserting Feiertag", slog.Any("Error", err)) } } }