codeword/internal/server/http/http_server.go

67 lines
1.1 KiB
Go
Raw Normal View History

2023-12-29 11:30:20 +00:00
package http
import (
"context"
2024-02-25 12:00:05 +00:00
"fmt"
2023-12-29 11:30:20 +00:00
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
)
type ServerConfig struct {
2024-02-25 12:00:05 +00:00
Logger *zap.Logger
Controllers []Controller
2023-12-29 11:30:20 +00:00
}
type Server struct {
2024-02-25 12:00:05 +00:00
Logger *zap.Logger
Controllers []Controller
app *fiber.App
2023-12-29 11:30:20 +00:00
}
func NewServer(config ServerConfig) *Server {
app := fiber.New()
s := &Server{
2024-02-25 12:00:05 +00:00
Logger: config.Logger,
Controllers: config.Controllers,
app: app,
2023-12-29 11:30:20 +00:00
}
s.registerRoutes()
return s
}
2023-12-29 18:02:50 +00:00
func (s *Server) Start(addr string) error {
2024-01-11 12:07:17 +00:00
if err := s.app.Listen(addr); err != nil {
s.Logger.Error("Failed to start server", zap.Error(err))
return err
}
return nil
2023-12-29 18:02:50 +00:00
}
func (s *Server) Shutdown(ctx context.Context) error {
return s.app.Shutdown()
}
2023-12-29 11:30:20 +00:00
func (s *Server) registerRoutes() {
2024-02-25 12:00:05 +00:00
for _, c := range s.Controllers {
router := s.app.Group(c.Name())
c.Register(router)
}
}
2024-01-11 16:29:53 +00:00
2024-02-25 12:00:05 +00:00
type Controller interface {
Register(router fiber.Router)
Name() string
2023-12-29 11:30:20 +00:00
}
2024-02-25 12:00:05 +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-12-29 11:30:20 +00:00
}