package handlers import ( "context" "net/http" "time" "git.haelnorr.com/h/golib/hws" "git.haelnorr.com/h/oslstats/internal/db" "git.haelnorr.com/h/oslstats/internal/view/page" "github.com/pkg/errors" "github.com/uptrace/bun" ) func NewSeason( s *hws.Server, conn *bun.DB, ) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { renderSafely(page.NewSeason(), s, r, w) return } }) } func NewSeasonSubmit( s *hws.Server, conn *bun.DB, ) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { }) } func IsSeasonNameUnique( s *hws.Server, conn *bun.DB, ) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { w.WriteHeader(http.StatusBadRequest) return } ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) defer cancel() tx, err := conn.BeginTx(ctx, nil) if err != nil { err = notifyInternalServiceError(s, r, "Database error", errors.Wrap(err, "conn.BeginTx")) if err != nil { throwInternalServiceError(s, w, r, "Error notifying client", err) } return } name := r.FormValue("name") unique, err := db.IsSeasonNameUnique(ctx, tx, name) if err != nil { err = notifyInternalServiceError(s, r, "Database error", errors.Wrap(err, "db.IsSeasonNameUnique")) if err != nil { throwInternalServiceError(s, w, r, "Error notifying client", err) } return } if !unique { w.WriteHeader(http.StatusConflict) return } }) } func IsSeasonShortNameUnique( s *hws.Server, conn *bun.DB, ) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { w.WriteHeader(http.StatusBadRequest) return } ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) defer cancel() tx, err := conn.BeginTx(ctx, nil) if err != nil { err = notifyInternalServiceError(s, r, "Database error", errors.Wrap(err, "conn.BeginTx")) if err != nil { throwInternalServiceError(s, w, r, "Error notifying client", err) } return } shortname := r.FormValue("short_name") unique, err := db.IsSeasonShortNameUnique(ctx, tx, shortname) if err != nil { err = notifyInternalServiceError(s, r, "Database error", errors.Wrap(err, "db.IsSeasonShortNameUnique")) if err != nil { throwInternalServiceError(s, w, r, "Error notifying client", err) } return } if !unique { w.WriteHeader(http.StatusConflict) return } }) }