conn = $conn; } /** * Get all preferences for a user (with caching) * @param int $userId User ID * @return array Associative array of preference_key => preference_value */ public function getUserPreferences(int $userId): array { return CacheHelper::remember(self::$CACHE_PREFIX, $userId, function() use ($userId) { $sql = "SELECT preference_key, preference_value FROM user_preferences WHERE user_id = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("i", $userId); $stmt->execute(); $result = $stmt->get_result(); $prefs = []; while ($row = $result->fetch_assoc()) { $prefs[$row['preference_key']] = $row['preference_value']; } $stmt->close(); return $prefs; }, self::$CACHE_TTL); } /** * Set or update a preference for a user * @param int $userId User ID * @param string $key Preference key * @param string $value Preference value * @return bool Success status */ public function setPreference(int $userId, string $key, string $value): bool { $sql = "INSERT INTO user_preferences (user_id, preference_key, preference_value) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE preference_value = VALUES(preference_value)"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("iss", $userId, $key, $value); $result = $stmt->execute(); $stmt->close(); // Invalidate cache for this user if ($result) { CacheHelper::delete(self::$CACHE_PREFIX, $userId); } return $result; } /** * Get a single preference value for a user * @param int $userId User ID * @param string $key Preference key * @param mixed $default Default value if preference doesn't exist * @return mixed Preference value or default */ public function getPreference(int $userId, string $key, $default = null) { $prefs = $this->getUserPreferences($userId); return $prefs[$key] ?? $default; } /** * Delete a preference for a user * @param int $userId User ID * @param string $key Preference key * @return bool Success status */ public function deletePreference(int $userId, string $key): bool { $sql = "DELETE FROM user_preferences WHERE user_id = ? AND preference_key = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("is", $userId, $key); $result = $stmt->execute(); $stmt->close(); // Invalidate cache for this user if ($result) { CacheHelper::delete(self::$CACHE_PREFIX, $userId); } return $result; } /** * Delete all preferences for a user * @param int $userId User ID * @return bool Success status */ public function deleteAllPreferences(int $userId): bool { $sql = "DELETE FROM user_preferences WHERE user_id = ?"; $stmt = $this->conn->prepare($sql); $stmt->bind_param("i", $userId); $result = $stmt->execute(); $stmt->close(); // Invalidate cache for this user if ($result) { CacheHelper::delete(self::$CACHE_PREFIX, $userId); } return $result; } /** * Clear all user preferences cache */ public static function clearCache(): void { CacheHelper::delete(self::$CACHE_PREFIX); } }