package middleware import ( "log/slog" "github.com/gin-gonic/gin" "git.mchus.pro/mchus/quoteforge/internal/localdb" "gorm.io/gorm" ) // OfflineDetector creates middleware that detects offline mode // Sets context values: // - "is_offline" (bool) - true if MariaDB is unavailable // - "localdb" (*localdb.LocalDB) - local database instance for fallback func OfflineDetector(mariaDB *gorm.DB, local *localdb.LocalDB) gin.HandlerFunc { return func(c *gin.Context) { isOffline := !checkMariaDBOnline(mariaDB) // Set context values for handlers c.Set("is_offline", isOffline) c.Set("localdb", local) if isOffline { slog.Debug("offline mode detected - MariaDB unavailable") } c.Next() } } // checkMariaDBOnline checks if MariaDB is accessible func checkMariaDBOnline(mariaDB *gorm.DB) bool { sqlDB, err := mariaDB.DB() if err != nil { return false } if err := sqlDB.Ping(); err != nil { return false } return true }