This commit is contained in:
2024-04-20 16:45:56 +03:00
commit 937c8d8eab
34 changed files with 3048 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
package rest
import (
"context"
"gerald/internal/adapters/config"
"gerald/internal/adapters/logger"
"gerald/internal/interfaces/rest/restapi"
"gerald/internal/interfaces/rest/restapi/operations"
"github.com/go-openapi/loads"
"github.com/rs/zerolog"
"go.uber.org/fx"
"net/http"
)
type Server struct {
config *config.Config
logger zerolog.Logger
}
func NewServer(
config *config.Config,
logger zerolog.Logger,
) *Server {
return &Server{
config: config,
logger: logger,
}
}
func (s *Server) SetupMiddleware(handler http.Handler) http.Handler {
return logger.HTTPLoggerFunc(s.logger, handler)
}
func StartHTTPServer(s *Server, lifecycle fx.Lifecycle) {
swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
if err != nil {
return
}
api := operations.NewGeraldAPI(swaggerSpec)
api.UseSwaggerUI()
//
// Add global middleware here
server := restapi.NewServer(api)
handler := s.SetupMiddleware(api.Serve(nil))
server.SetHandler(handler)
server.Port = int(s.config.ApplicationPort)
go func() {
err = server.Serve()
if err != nil {
s.logger.Fatal().Err(err).Msg("Cannot start HTTP server")
}
}()
lifecycle.Append(fx.Hook{
OnStop: func(ctx context.Context) error {
return server.Shutdown()
},
})
}