package main import ( "context" "log" "os" "time" "pki-manager/config" "pki-manager/internal/api" "pki-manager/internal/repository" "github.com/gin-gonic/gin" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { // Configuration cfg := config.LoadConfig() // MongoDB connection ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() clientOptions := options.Client().ApplyURI(cfg.MongoDBURI) client, err := mongo.Connect(ctx, clientOptions) if err != nil { log.Fatal(err) } defer client.Disconnect(ctx) // Verify connection err = client.Ping(ctx, nil) if err != nil { log.Fatal(err) } log.Println("Connected to MongoDB!") // Initialize repository repo := repository.NewMongoRepository(client.Database(cfg.DBName)) // Create certs directory if not exists if err := os.MkdirAll("certs", 0755); err != nil { log.Fatal(err) } // Setup Gin if cfg.Environment == "production" { gin.SetMode(gin.ReleaseMode) } router := gin.Default() // Setup routes api.SetupRoutes(router, repo, cfg.JWTSecret) // Start server log.Printf("Server starting on port %s", cfg.Port) if err := router.Run(":" + cfg.Port); err != nil { log.Fatal(err) } }