Files
wishlify/router/router.go
2026-02-18 02:53:15 +03:00

55 lines
1.2 KiB
Go

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(),
}
}