diff --git a/api/api/weekly.go b/api/api/weekly.go index 51e21f7..42d8782 100644 --- a/api/api/weekly.go +++ b/api/api/weekly.go @@ -22,4 +22,29 @@ func WeeklyHandler(w http.ResponseWriter, r *http.Request) { logger.Info("Weekly found", "id", id) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(weekly) +} + +func CreateWeeklyHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPut { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + + var weekly domain.Weekly + jsonParser := json.NewDecoder(r.Body) + if err := jsonParser.Decode(&weekly); err != nil { + logger.Warn("Failed to parse weekly", "err", err) + w.WriteHeader(http.StatusBadRequest) + return + } + + err := domain.WeeklyAdd(&weekly) + if err != nil { + logger.Warn("Failed to create weekly", "err", err) + w.WriteHeader(http.StatusBadRequest) + return + } + + logger.Info("Created weekly", "id", weekly.WeeklyId) + w.WriteHeader(http.StatusCreated) } \ No newline at end of file diff --git a/api/domain/weekly.go b/api/domain/weekly.go index e81c6fb..2a28e8b 100644 --- a/api/domain/weekly.go +++ b/api/domain/weekly.go @@ -117,3 +117,20 @@ func WeeklyGet(weekly *Weekly) error { return nil } + +func WeeklyAdd(weekly *Weekly) error { + if weekly.WeeklyId == "" { + return errors.New("WeeklyGet: missing weekly id, nothing to create") + } + + _, err := db.Exec( + context.Background(), + `insert into weekly (WeeklyId) values ($1)`, + weekly.WeeklyId, + ) + if err != nil { + return err + } + + return nil +} diff --git a/api/main.go b/api/main.go index a4359a6..dbf44c6 100644 --- a/api/main.go +++ b/api/main.go @@ -29,6 +29,7 @@ func main() { http.HandleFunc("/api/player/{id}", api.PlayerHandler) http.HandleFunc("/api/match/{id}", api.MatchHandler) http.HandleFunc("/api/weekly/{id}", api.WeeklyHandler) + http.HandleFunc("/api/weekly", api.AdminMiddleware(api.CreateWeeklyHandler)) http.HandleFunc("/api/admin", api.AdminMiddleware(api.AdminHandler)) logger.Info("Server started")