feedback/internal/server/http.go

59 lines
1.6 KiB
Go
Raw Normal View History

2023-04-20 02:03:21 +00:00
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"
2024-05-28 13:01:55 +00:00
"github.com/themakers/hlog"
2023-04-20 02:03:21 +00:00
"go.uber.org/zap"
2024-11-25 08:53:24 +00:00
"gitea.pena/PenaSide/common/log_mw"
2024-11-25 08:48:06 +00:00
"gitea.pena/PenaSide/feedback/internal/config"
"gitea.pena/PenaSide/feedback/internal/initialize"
2023-04-20 02:03:21 +00:00
)
type HTTP struct {
fiber *fiber.App
cfg *config.Config
logger *zap.Logger
}
// NewHTTP - задает конфиги и миддлвейры для http сервера
2024-05-28 13:01:55 +00:00
func NewHTTP(cfg *config.Config, logger *zap.Logger, hlogger hlog.Logger) *HTTP {
2023-04-20 02:03:21 +00:00
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,
}),
log_mw.ContextLogger(hlogger),
2023-04-20 02:03:21 +00:00
)
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()
}