veza/veza-backend-api/cmd/main.go.legacy
2025-12-03 20:29:37 +01:00

78 lines
1.6 KiB
Text

package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"veza-backend-api/internal/config"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
func main() {
// Initialiser la configuration
cfg, err := config.NewConfig()
if err != nil {
log.Fatalf("Failed to initialize configuration: %v", err)
}
defer cfg.Close()
// Configurer Gin
if os.Getenv("GIN_MODE") == "release" {
gin.SetMode(gin.ReleaseMode)
}
// Créer le router
router := gin.New()
// Configurer les middlewares globaux
cfg.SetupMiddleware(router)
// Configurer les routes
cfg.SetupRoutes(router)
// Configuration du serveur
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
server := &http.Server{
Addr: ":" + port,
Handler: router,
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
IdleTimeout: 60 * time.Second,
}
// Démarrer le serveur en arrière-plan
go func() {
cfg.Logger.Info("Starting server", zap.String("port", port))
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
cfg.Logger.Fatal("Failed to start server", zap.Error(err))
}
}()
// Attendre un signal d'arrêt
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
cfg.Logger.Info("Shutting down server...")
// Arrêter le serveur gracieusement
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
cfg.Logger.Fatal("Server forced to shutdown", zap.Error(err))
}
cfg.Logger.Info("Server exited")
}