package server import ( "encoding/json" "net/http" apimiddleware "clintonambulance.com/calculate_negative_points/internal/api/middleware" views_api "clintonambulance.com/calculate_negative_points/internal/api/requests" "clintonambulance.com/calculate_negative_points/internal/config" internal_web "clintonambulance.com/calculate_negative_points/internal/web" "github.com/go-chi/chi/v5/middleware" "github.com/swaggest/openapi-go/openapi31" "github.com/swaggest/rest/response" "github.com/swaggest/rest/web" "go.uber.org/zap" ) type ErrorResponse struct { Message string `json:"message"` } func errorResponder(w http.ResponseWriter, error string, code int) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.Header().Set("X-Content-Type-Options", "nosniff") w.WriteHeader(code) _ = json.NewEncoder(w).Encode(ErrorResponse{Message: error}) } func notFoundResponder(w http.ResponseWriter, _r *http.Request) { errorResponder(w, "Not Found", http.StatusNotFound) } func NewHttpServer(logger *zap.Logger, version config.Version) (*web.Service, *openapi31.Reflector) { reflector := openapi31.NewReflector() service := web.NewService(reflector) service.OpenAPISchema().SetTitle("Calculate Negative Points") service.OpenAPISchema().SetDescription("Easily maintain Calculate Negative Points") service.OpenAPISchema().SetVersion("v1.0.0") service.Use( middleware.RealIP, middleware.RequestID, apimiddleware.AddRequestIDHeaderMiddleware, apimiddleware.LoggingMiddleware(logger), apimiddleware.ErrorHandler, ) service.NotFound(notFoundResponder) return service, reflector } func MountAllEndpoints(srv *web.Service, version config.Version, config *config.ApplicationConfig, logger *zap.Logger) { views_api.MountInternalApiEndpoints(srv, config, logger) // This should be last because it does wildcard matching internal_web.MountWebEndpoints(srv, config, logger) } func init() { // Override some global defaults: // This is just "application/json" by default, let's include the charset as well. response.DefaultSuccessResponseContentType = "application/json; charset=UTF-8" }