diff --git a/cmd/api/main.go b/cmd/api/main.go index adf9507..d81e84b 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -10,6 +10,7 @@ import ( "time" "github.com/rs/zerolog/log" + "gorm.io/gorm" "github.com/treytartt/mycrib-api/internal/config" "github.com/treytartt/mycrib-api/internal/database" @@ -34,10 +35,18 @@ func main() { Int("port", cfg.Server.Port). Msg("Starting MyCrib API server") - // Connect to database - db, err := database.Connect(&cfg.Database, cfg.Server.Debug) + // Connect to database (retry with backoff) + var db *gorm.DB + for i := 0; i < 5; i++ { + db, err = database.Connect(&cfg.Database, cfg.Server.Debug) + if err == nil { + break + } + log.Warn().Err(err).Int("attempt", i+1).Msg("Failed to connect to database, retrying...") + time.Sleep(time.Duration(i+1) * 2 * time.Second) + } if err != nil { - log.Fatal().Err(err).Msg("Failed to connect to database") + log.Fatal().Err(err).Msg("Failed to connect to database after retries") } defer database.Close() @@ -46,12 +55,15 @@ func main() { log.Fatal().Err(err).Msg("Failed to run database migrations") } - // Connect to Redis - cache, err := services.NewCacheService(&cfg.Redis) + // Connect to Redis (optional - don't fail if unavailable) + var cache *services.CacheService + cache, err = services.NewCacheService(&cfg.Redis) if err != nil { - log.Fatal().Err(err).Msg("Failed to connect to Redis") + log.Warn().Err(err).Msg("Failed to connect to Redis - caching disabled") + cache = nil + } else { + defer cache.Close() } - defer cache.Close() // Initialize email service var emailService *services.EmailService