codeword/internal/server/http/http_server.go

84 lines
2.3 KiB
Go
Raw Normal View History

2023-12-29 11:30:20 +00:00
package http
import (
2024-01-11 18:20:33 +00:00
"codeword/internal/controller/promocode"
"codeword/internal/controller/recovery"
2023-12-29 11:30:20 +00:00
"context"
2023-12-29 15:20:11 +00:00
"fmt"
2023-12-29 11:30:20 +00:00
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
2023-12-29 15:20:11 +00:00
"time"
2023-12-29 11:30:20 +00:00
)
type ServerConfig struct {
2024-01-11 16:29:53 +00:00
Logger *zap.Logger
2024-01-11 18:20:33 +00:00
RecoveryController *recovery.RecoveryController
PromoCodeController *promocode.PromoCodeController
2023-12-29 11:30:20 +00:00
}
type Server struct {
2024-01-11 16:29:53 +00:00
Logger *zap.Logger
2024-01-11 18:20:33 +00:00
RecoveryController *recovery.RecoveryController
PromoCodeController *promocode.PromoCodeController
2024-01-11 16:29:53 +00:00
app *fiber.App
2023-12-29 11:30:20 +00:00
}
func NewServer(config ServerConfig) *Server {
app := fiber.New()
s := &Server{
2024-01-11 18:20:33 +00:00
Logger: config.Logger,
RecoveryController: config.RecoveryController,
PromoCodeController: config.PromoCodeController,
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() {
s.app.Get("/liveness", s.handleLiveness)
s.app.Get("/readiness", s.handleReadiness)
s.app.Post("/recover", s.RecoveryController.HandleRecoveryRequest)
s.app.Get("/recover/:sign", s.RecoveryController.HandleRecoveryLink)
2024-01-11 16:29:53 +00:00
s.app.Post("/promocode/create", s.PromoCodeController.CreatePromoCode)
2024-01-11 19:47:54 +00:00
s.app.Put("/promocode/edit", s.PromoCodeController.EditPromoCode)
2024-01-12 11:28:22 +00:00
s.app.Post("/promocode/getList", s.PromoCodeController.GetList)
2024-01-12 13:46:36 +00:00
s.app.Post("/promocode/activate", s.PromoCodeController.Activate)
2024-01-12 14:50:53 +00:00
s.app.Delete("/promocode/:promocodeID", s.PromoCodeController.Delete)
2023-12-29 11:30:20 +00:00
//... other
}
func (s *Server) handleLiveness(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusOK)
}
func (s *Server) handleReadiness(c *fiber.Ctx) error {
2023-12-29 15:20:11 +00:00
startTime := time.Now()
2023-12-31 12:22:03 +00:00
if err := s.RecoveryController.HandlePingDB(c); err != nil {
2023-12-29 11:30:20 +00:00
s.Logger.Error("Failed to ping the database", zap.Error(err))
return c.Status(fiber.StatusServiceUnavailable).SendString("DB ping failed")
}
2024-01-18 17:25:40 +00:00
duration := time.Since(startTime)
2023-12-29 15:20:11 +00:00
durationMillis := duration.Milliseconds()
responseMessage := fmt.Sprintf("DB ping success - Time taken: %d ms", durationMillis)
return c.Status(fiber.StatusOK).SendString(responseMessage)
2023-12-29 11:30:20 +00:00
}