feedback/internal/server/http.go
2023-04-20 07:03:21 +05:00

56 lines
1.5 KiB
Go

package server
import (
"github.com/gofiber/contrib/fiberzap"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/limiter"
"github.com/gofiber/fiber/v2/middleware/recover"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/config"
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/initialize"
)
type HTTP struct {
fiber *fiber.App
cfg *config.Config
logger *zap.Logger
}
// NewHTTP - задает конфиги и миддлвейры для http сервера
func NewHTTP(cfg *config.Config, logger *zap.Logger) *HTTP {
srv := fiber.New(fiber.Config{
AppName: "TemplateGenerator feedback",
ErrorHandler: fiber.DefaultErrorHandler,
})
srv.Use(
recover.New(recover.Config{EnableStackTrace: true}),
fiberzap.New(fiberzap.Config{Logger: logger}),
limiter.New(limiter.Config{
Max: 1,
Expiration: cfg.HttpRateLimit,
}),
)
return &HTTP{fiber: srv, cfg: cfg, logger: logger}
}
// Register - автоматически регистрирует все контроллеры
func (srv *HTTP) Register(controllers ...initialize.Controller) *HTTP {
for _, controller := range controllers {
method, path, name, handler := controller.Register()
srv.fiber.Add(method, path, handler).Name(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()
}