54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package server
|
|
|
|
import (
|
|
"github.com/gofiber/contrib/fiberzap"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/recover"
|
|
"go.uber.org/zap"
|
|
"penahub.gitlab.yandexcloud.net/backend/verification/internal/config"
|
|
"penahub.gitlab.yandexcloud.net/backend/verification/internal/initialize"
|
|
)
|
|
|
|
type HTTP struct {
|
|
fiber *fiber.App
|
|
cfg *config.Config
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewHTTP(cfg *config.Config, logger *zap.Logger) *HTTP {
|
|
srv := fiber.New(fiber.Config{
|
|
AppName: "Verification",
|
|
ErrorHandler: fiber.DefaultErrorHandler,
|
|
BodyLimit: 50 << 20,
|
|
})
|
|
|
|
srv.Use(
|
|
recover.New(recover.Config{EnableStackTrace: true}),
|
|
fiberzap.New(fiberzap.Config{Logger: logger}),
|
|
LocalJwt(),
|
|
Jwt(),
|
|
)
|
|
|
|
return &HTTP{fiber: srv, cfg: cfg, logger: logger}
|
|
}
|
|
|
|
// Register - автоматически регистрирует все контроллеры.
|
|
func (srv *HTTP) Register(controllers ...initialize.Controller) *HTTP {
|
|
for _, controller := range controllers {
|
|
for _, route := range controller.GetRoutes() {
|
|
srv.fiber.Add(route.Method, route.Path, route.Handler).Name(route.Name)
|
|
}
|
|
}
|
|
return srv
|
|
}
|
|
|
|
// Start - запускает http сервер.
|
|
func (srv *HTTP) Start() error {
|
|
return srv.fiber.Listen(srv.cfg.HttpAddress)
|
|
}
|
|
|
|
// Stop - останавливает http сервер.
|
|
func (srv *HTTP) Stop() error {
|
|
return srv.fiber.Shutdown()
|
|
}
|