Merged in feature/openapifixes (pull request #106)

OpenAPI Middleware & Fixes

* updates
This commit is contained in:
Michael McGuinness
2025-03-18 13:06:42 +00:00
parent 555b6d420b
commit 3dd0c718cd
56 changed files with 8577 additions and 122 deletions
+42 -25
View File
@@ -11,10 +11,12 @@ import (
"queryorchestration/internal/server"
"github.com/getkin/kin-openapi/openapi3"
"github.com/getkin/kin-openapi/openapi3filter"
"github.com/labstack/echo-contrib/echoprometheus"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
_ "github.com/lib/pq"
oapimiddleware "github.com/oapi-codegen/echo-middleware"
echoSwagger "github.com/swaggo/echo-swagger"
)
@@ -94,16 +96,6 @@ func New(ctx context.Context, cfg Config) (*Server, error) {
}
e := echo.New()
// Add Prometheus middleware
e.Use(echoprometheus.NewMiddleware("echo")) // Add the middleware
e.GET("/metrics", echoprometheus.NewHandler())
// Other middlewares
e.Use(getSlogCustomEchoMiddleware(cfg.GetLogger()))
e.Use(middleware.Recover())
e.Use(middleware.CORS())
cfg.SetRouter(e)
opnapi, err := cfg.RegisterHandlers()
@@ -111,24 +103,17 @@ func New(ctx context.Context, cfg Config) (*Server, error) {
return nil, err
}
jsonFunc, err := getSwaggerJSONFunc(opnapi)
e.Use(echoprometheus.NewMiddleware("echo"))
e.GET("/metrics", echoprometheus.NewHandler())
e.Use(getSlogCustomEchoMiddleware(cfg.GetLogger()))
e.Use(middleware.Recover())
e.Use(middleware.CORS())
err = setOapi(e, opnapi)
if err != nil {
return nil, err
}
e.GET("/swagger/doc.json", jsonFunc)
yamlFunc, err := getSwaggerYAMLFunc(opnapi)
if err != nil {
return nil, err
}
e.GET("/swagger/doc.yaml", yamlFunc)
e.GET("/swagger/*", echoSwagger.EchoWrapHandler(
echoSwagger.DocExpansion("full"),
echoSwagger.DeepLinking(true),
echoSwagger.DomID("swagger-ui"),
echoSwagger.PersistAuthorization(true),
))
host := "0.0.0.0"
port := 8080
@@ -143,6 +128,38 @@ func New(ctx context.Context, cfg Config) (*Server, error) {
}, nil
}
func setOapi(e *echo.Echo, opnapi *openapi3.T) error {
opnapi.Servers = nil
validatorOptions := &oapimiddleware.Options{
Options: openapi3filter.Options{
AuthenticationFunc: openapi3filter.NoopAuthenticationFunc,
MultiError: true,
},
}
e.Use(oapimiddleware.OapiRequestValidatorWithOptions(opnapi, validatorOptions))
jsonFunc, err := getSwaggerJSONFunc(opnapi)
if err != nil {
return err
}
e.GET("/swagger/doc.json", jsonFunc)
yamlFunc, err := getSwaggerYAMLFunc(opnapi)
if err != nil {
return err
}
e.GET("/swagger/doc.yaml", yamlFunc)
e.GET("/swagger/*", echoSwagger.EchoWrapHandler(
echoSwagger.DocExpansion("full"),
echoSwagger.DeepLinking(true),
echoSwagger.DomID("swagger-ui"),
echoSwagger.PersistAuthorization(true),
))
return nil
}
func (s *Server) Listen() {
slog.Info("Listening for requests", "port", s.port)
defer func() {