Create logic and endpoint for confirming report location

This commit is contained in:
Eli Ribble 2026-03-04 00:22:46 +00:00
parent b0fce4f363
commit c7dd53b6eb
No known key found for this signature in database
6 changed files with 63 additions and 18 deletions

View file

@ -5,9 +5,12 @@ import (
"net/http"
nhttp "github.com/Gleipnir-Technology/nidus-sync/http"
"github.com/gorilla/schema"
"github.com/rs/zerolog/log"
)
var decoder = schema.NewDecoder()
type handlerFunctionGet[T any] func(context.Context, *http.Request) (*Response[T], *nhttp.ErrorWithStatus)
func MakeGet[T any](f handlerFunctionGet[T]) http.HandlerFunc {
@ -25,3 +28,30 @@ func MakeGet[T any](f handlerFunctionGet[T]) http.HandlerFunc {
})
}
}
type handlerFunctionPost[T any] func(context.Context, *http.Request, T) (string, *nhttp.ErrorWithStatus)
func MakePost[T any](f handlerFunctionPost[T]) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil {
RespondError(w, "Failed to parse form", err, http.StatusBadRequest)
return
}
var content T
err = decoder.Decode(&content, r.PostForm)
if err != nil {
RespondError(w, "Failed to decode form", err, http.StatusBadRequest)
return
}
ctx := r.Context()
path, e := f(ctx, r, content)
if e != nil {
http.Error(w, e.Error(), e.Status)
return
}
http.Redirect(w, r, path, http.StatusFound)
}
}