67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
|
package http
|
||
|
|
||
|
import (
|
||
|
controller "codeword/internal/controller/recovery"
|
||
|
"codeword/internal/repository"
|
||
|
"context"
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
type ServerConfig struct {
|
||
|
Logger *zap.Logger
|
||
|
Repo *repository.UserRepository
|
||
|
RecoveryController *controller.RecoveryController
|
||
|
}
|
||
|
|
||
|
type Server struct {
|
||
|
Logger *zap.Logger
|
||
|
Repo *repository.UserRepository
|
||
|
RecoveryController *controller.RecoveryController
|
||
|
app *fiber.App
|
||
|
}
|
||
|
|
||
|
func NewServer(config ServerConfig) *Server {
|
||
|
app := fiber.New()
|
||
|
|
||
|
s := &Server{
|
||
|
Logger: config.Logger,
|
||
|
Repo: config.Repo,
|
||
|
RecoveryController: config.RecoveryController,
|
||
|
app: app,
|
||
|
}
|
||
|
|
||
|
s.registerRoutes()
|
||
|
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
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)
|
||
|
//... other
|
||
|
}
|
||
|
|
||
|
func (s *Server) handleLiveness(c *fiber.Ctx) error {
|
||
|
return c.SendStatus(fiber.StatusOK)
|
||
|
}
|
||
|
|
||
|
func (s *Server) handleReadiness(c *fiber.Ctx) error {
|
||
|
if err := s.Repo.Ping(); err != nil {
|
||
|
s.Logger.Error("Failed to ping the database", zap.Error(err))
|
||
|
return c.Status(fiber.StatusServiceUnavailable).SendString("DB ping failed")
|
||
|
}
|
||
|
return c.Status(fiber.StatusOK).SendString("42")
|
||
|
}
|
||
|
|
||
|
func (s *Server) Start(addr string) error {
|
||
|
return s.app.Listen(addr)
|
||
|
}
|
||
|
|
||
|
func (s *Server) Shutdown(ctx context.Context) error {
|
||
|
return s.app.Shutdown()
|
||
|
}
|