/* * SPDX-FileCopyrightText: 2023 jordi fita mas * SPDX-License-Identifier: AGPL-3.0-only */ package campsite import ( "net/http" "time" "dev.tandem.ws/tandem/camper/pkg/auth" "dev.tandem.ws/tandem/camper/pkg/campsite/types" "dev.tandem.ws/tandem/camper/pkg/database" httplib "dev.tandem.ws/tandem/camper/pkg/http" "dev.tandem.ws/tandem/camper/pkg/season" "dev.tandem.ws/tandem/camper/pkg/template" ) type PublicHandler struct { types *types.PublicHandler } func NewPublicHandler() *PublicHandler { return &PublicHandler{ types: &types.PublicHandler{}, } } func (h *PublicHandler) Handler(user *auth.User, company *auth.Company, conn *database.Conn) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var head string head, r.URL.Path = httplib.ShiftPath(r.URL.Path) switch head { case "types": h.types.Handler(user, company, conn).ServeHTTP(w, r) case "calendar": h.calendarHandler(user, company, conn).ServeHTTP(w, r) default: http.NotFound(w, r) } }) } func (h *PublicHandler) calendarHandler(user *auth.User, company *auth.Company, conn *database.Conn) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var head string head, r.URL.Path = httplib.ShiftPath(r.URL.Path) switch head { case "": switch r.Method { case http.MethodGet: year := season.GetCalendarYear(r.URL.Query()) month := season.GetCalendarMonth(r.URL.Query()) date := time.Date(year, month, 1, 0, 0, 0, 0, time.UTC).AddDate(0, 1, 0) calendar, err := season.CollectSeasonCalendar(r.Context(), company, conn, date.Year(), date.Month(), 3) if err != nil { panic(err) } template.MustRenderPublicNoLayout(w, r, user, company, "campsite/calendar.gohtml", calendar) default: httplib.MethodNotAllowed(w, r, http.MethodGet) } default: http.NotFound(w, r) } }) }