54 lines
2.0 KiB
Go
54 lines
2.0 KiB
Go
// 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))
|
|
}
|
|
}
|
|
}
|