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() }