45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"log/slog"
|
|
"net/http"
|
|
)
|
|
|
|
type ErrorResponse struct {
|
|
// Statustext of Errorcode
|
|
Status string `json:"status"`
|
|
Error string `json:"error"` // Error Message
|
|
}
|
|
|
|
func MountApiEndpoints(r *http.ServeMux) {
|
|
r.HandleFunc("POST /api/news/", createNewsItem)
|
|
r.HandleFunc("GET /api/news/", readNewsItems)
|
|
r.HandleFunc("GET /api/news/{id}", readNewsItem)
|
|
r.HandleFunc("PATCH /api/news/", updateNewsItem)
|
|
r.HandleFunc("DELETE /api/news/{id}", deleteNewsItem)
|
|
|
|
r.HandleFunc("POST /api/retailers/", createRetailerItem)
|
|
r.HandleFunc("GET /api/retailers/", readRetailerItems)
|
|
r.HandleFunc("GET /api/retailers/{id}", readRetailerItem)
|
|
r.HandleFunc("PATCH /api/retailers/", updateRetailerItem)
|
|
r.HandleFunc("DELETE /api/retailers/{id}", deleteRetailerItem)
|
|
}
|
|
|
|
func handleError(err error, statusCode int, rw http.ResponseWriter) {
|
|
slog.Warn("rest error", "error", err)
|
|
rw.Header().Add("Content-Type", "application/json")
|
|
rw.WriteHeader(statusCode)
|
|
json.NewEncoder(rw).Encode(ErrorResponse{
|
|
Status: http.StatusText(statusCode),
|
|
Error: err.Error(),
|
|
})
|
|
}
|
|
|
|
func decode(r io.Reader, val any) error {
|
|
dec := json.NewDecoder(r)
|
|
dec.DisallowUnknownFields()
|
|
return dec.Decode(val)
|
|
}
|