1
0
Fork 0

feat: implement rest server with Fiber and OpenAPI spec, bump deps, use training.InMemoryTrainingRepository

This commit is contained in:
Vojtěch Mareš 2024-05-04 17:51:11 +02:00
parent 263bed126e
commit 58b017a59f
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
5 changed files with 297 additions and 10 deletions

View file

@ -6,19 +6,23 @@ import (
"time"
fiberzap "github.com/gofiber/contrib/fiberzap/v2"
"github.com/gofiber/contrib/swagger"
"github.com/gofiber/fiber/v2"
middleware "github.com/oapi-codegen/fiber-middleware"
"go.uber.org/zap"
)
type Server struct {
port int
logger *zap.Logger
port int
logger *zap.Logger
apiHandlers *APIHandlers
}
func NewServer(port int, logger *zap.Logger) *Server {
func NewServer(apiHandlers *APIHandlers, port int, logger *zap.Logger) *Server {
return &Server{
port: port,
logger: logger,
apiHandlers: apiHandlers,
port: port,
logger: logger,
}
}
@ -39,9 +43,28 @@ func (s *Server) Run(ctx context.Context) {
Logger: s.logger,
}))
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
})
swaggerConfig := swagger.Config{
BasePath: "/",
FilePath: "./api/v1/openapi.yaml",
Path: "/swagger",
Title: "Swagger API Docs",
}
app.Use(swagger.New(swaggerConfig))
swagger, err := GetSwagger()
if err != nil {
sugared.Fatal("Error getting swagger", zap.Error(err))
}
// See: https://github.com/deepmap/oapi-codegen/blob/master/examples/petstore-expanded/fiber/petstore.go#L41
// Clear out the servers array in the swagger spec, that skips validating
// that server names match. We don't know how this thing will be run.
swagger.Servers = nil
app.Use(middleware.OapiRequestValidator(swagger))
handlers := NewStrictHandler(s.apiHandlers, nil)
RegisterHandlers(app, handlers)
go func() {
err := app.Listen(fmt.Sprintf(":%d", s.port))
@ -56,7 +79,7 @@ func (s *Server) Run(ctx context.Context) {
shutdownBegan := time.Now()
sugared.Infoln("Shutting HTTP server down gracefully...")
err := app.ShutdownWithTimeout(10 * time.Second)
err = app.ShutdownWithTimeout(10 * time.Second)
if err != nil {
panic(err)
}