77 lines
2.3 KiB
Go
77 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"counter/internal/delivery/http"
|
|
"counter/internal/delivery/http/handlers"
|
|
"counter/internal/infrastructure/config"
|
|
"counter/internal/infrastructure/database/postgres"
|
|
"counter/internal/infrastructure/logging"
|
|
"counter/internal/infrastructure/metrics"
|
|
"counter/internal/infrastructure/security"
|
|
"counter/internal/usecase/auth"
|
|
"counter/internal/usecase/counter"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func main() {
|
|
// 1. Load configuration
|
|
cfg := config.LoadConfig()
|
|
|
|
// 2. Initialize logger
|
|
logger, err := logging.InitLogger(cfg)
|
|
if err != nil {
|
|
logrus.Fatal("Failed to initialize logger:", err)
|
|
}
|
|
|
|
// 3. Initialize database
|
|
dbConn, err := postgres.NewConnection(cfg, logger)
|
|
if err != nil {
|
|
logger.WithError(err).Fatal("Failed to initialize database")
|
|
}
|
|
defer dbConn.Close()
|
|
|
|
// 4. Initialize repositories (infrastructure implementations)
|
|
userRepo := postgres.NewUserRepository(dbConn.GetDB())
|
|
counterRepo := postgres.NewCounterRepository(dbConn.GetDB())
|
|
|
|
// 5. Initialize services (infrastructure)
|
|
passwordService := security.NewPasswordService()
|
|
jwtService := security.NewJWTService(cfg.JWTSecret)
|
|
metricsService := metrics.NewPrometheusMetricsService()
|
|
|
|
// 6. Initialize use cases (business logic)
|
|
authService := auth.NewAuthService(userRepo, passwordService, jwtService)
|
|
counterService := counter.NewCounterService(counterRepo)
|
|
|
|
// 7. Initialize handlers (delivery)
|
|
authHandler := handlers.NewAuthHandler(authService)
|
|
counterHandler := handlers.NewCounterHandler(counterService)
|
|
|
|
// 8. Initialize router
|
|
router := http.NewRouter(authHandler, counterHandler, cfg, logger, metricsService, jwtService)
|
|
router.SetupRoutes()
|
|
|
|
// 9. Start metrics server
|
|
metricsService.StartMetricsServer(cfg.MetricsPort)
|
|
|
|
// 10. Start HTTP server
|
|
port := cfg.Port
|
|
|
|
logger.WithFields(logrus.Fields{
|
|
"port": port,
|
|
"metrics_port": cfg.MetricsPort,
|
|
"log_dir": cfg.LogDir,
|
|
"log_volume": cfg.LogVolume,
|
|
}).Info("🚀 Starting Counter Application Server")
|
|
|
|
logger.WithFields(logrus.Fields{
|
|
"health_url": "http://localhost:" + port + "/health",
|
|
"api_url": "http://localhost:" + port + "/api/v1",
|
|
"frontend_url": "http://localhost:" + port + "/",
|
|
"metrics_url": "http://localhost:" + cfg.MetricsPort + "/metrics",
|
|
}).Info("✅ Server is ready and accepting connections")
|
|
|
|
logger.Fatal(router.GetRouter().Run(":" + port))
|
|
}
|