package router import ( "encoding/json" "fmt" "net/http" ) type router struct { mux *http.ServeMux } func (router *router) Mux() *http.ServeMux { return router.mux } func (router *router) MsgError(msg string, err error) string { m := msg if err != nil { m = fmt.Sprintf("%s: %v", msg, err) } return m } func (router *router) SendJSON(w http.ResponseWriter, data any) error { w.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(data); err != nil { return fmt.Errorf("something bad happened: %v", err) } return nil } func (router *router) Handle(pattern string, handler func(w http.ResponseWriter, r *http.Request) error) { router.mux.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Credentials", "true") w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000") w.Header().Set("Access-Control-Allow-Methods", "GET,POST,PATCH,DELETE,OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Content-Length") if err := handler(w, r); err != nil { router.SendJSON(w, struct { Error string `json:"error"` }{ Error: err.Error(), }) } }) } func New() *router { return &router{ mux: http.NewServeMux(), } }