59 lines
1.6 KiB
Go
59 lines
1.6 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"
|
|
"github.com/themakers/hlog"
|
|
"go.uber.org/zap"
|
|
"gitea.pena/PenaSide/common/log_mw"
|
|
"gitea.pena/PenaSide/feedback/internal/config"
|
|
"gitea.pena/PenaSide/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, hlogger hlog.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,
|
|
}),
|
|
log_mw.ContextLogger(hlogger),
|
|
)
|
|
|
|
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()
|
|
}
|