customer/internal/server/http.go

79 lines
1.5 KiB
Go
Raw Normal View History

2023-05-16 01:12:07 +00:00
package server
import (
"context"
"fmt"
2024-05-20 12:32:59 +00:00
"github.com/gofiber/fiber/v2"
"github.com/themakers/hlog"
2023-05-17 20:27:09 +00:00
"go.uber.org/zap"
2024-06-07 14:28:54 +00:00
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw"
2024-11-18 07:23:41 +00:00
"gitea.pena/PenaSide/customer/internal/models"
"gitea.pena/PenaSide/customer/internal/utils"
2023-05-16 01:12:07 +00:00
)
2024-05-20 12:32:59 +00:00
type ServerConfig struct {
Logger *zap.Logger
Hlog hlog.Logger
2024-05-20 12:32:59 +00:00
Controllers []Controller
JWTConfig *models.JWTConfiguration
2023-05-17 20:27:09 +00:00
}
2024-05-20 12:32:59 +00:00
type Server struct {
Logger *zap.Logger
Hlog hlog.Logger
2024-05-20 12:32:59 +00:00
Controllers []Controller
app *fiber.App
2023-05-16 01:12:07 +00:00
}
2024-05-20 12:32:59 +00:00
func NewServer(config ServerConfig) *Server {
app := fiber.New()
2023-06-13 22:41:33 +00:00
2024-05-20 12:32:59 +00:00
jwtUtil := utils.NewJWT(config.JWTConfig)
app.Use(utils.NewAuthenticator(jwtUtil))
2024-06-07 14:28:54 +00:00
app.Use(log_mw.ContextLogger(config.Hlog))
2023-06-13 22:41:33 +00:00
2024-05-20 12:32:59 +00:00
s := &Server{
Logger: config.Logger,
Controllers: config.Controllers,
Hlog: config.Hlog,
2024-05-20 12:32:59 +00:00
app: app,
2023-06-13 22:41:33 +00:00
}
2024-05-20 12:32:59 +00:00
s.registerRoutes()
2023-05-16 01:12:07 +00:00
2024-05-20 12:32:59 +00:00
return s
2023-05-16 01:12:07 +00:00
}
2024-05-20 12:32:59 +00:00
func (s *Server) Start(addr string) error {
if err := s.app.Listen(addr); err != nil {
s.Logger.Error("Failed to start server", zap.Error(err))
return err
2023-05-16 01:12:07 +00:00
}
2024-05-20 12:32:59 +00:00
return nil
2023-05-16 01:12:07 +00:00
}
2024-05-20 12:32:59 +00:00
func (s *Server) Shutdown(ctx context.Context) error {
return s.app.Shutdown()
}
2023-05-16 01:12:07 +00:00
2024-05-20 12:32:59 +00:00
func (s *Server) registerRoutes() {
for _, c := range s.Controllers {
router := s.app.Group(c.Name())
c.Register(router)
2023-05-16 01:12:07 +00:00
}
}
2024-05-20 12:32:59 +00:00
type Controller interface {
Register(router fiber.Router)
Name() string
}
2023-05-16 01:12:07 +00:00
2024-05-20 12:32:59 +00:00
func (s *Server) ListRoutes() {
fmt.Println("Registered routes:")
for _, stack := range s.app.Stack() {
for _, route := range stack {
fmt.Printf("%s %s\n", route.Method, route.Path)
}
}
2023-05-16 01:12:07 +00:00
}