/// Загружает профиль пользователя по идентификатору
///
/// Запрос выполняется к эндпоинту `/users/{id}` с авторизацией через Bearer токен.
/// При ошибке сети повторяет запрос до трёх раз с экспоненциальной задержкой.
///
/// - Parameters:
/// - id: Уникальный идентификатор пользователя. Должен соответствовать формату UUID.
/// - completion: Замыкание, вызываемое по завершении запроса. Содержит результат операции.
///
/// - Throws: `NetworkError.invalidURL` если идентификатор имеет неверный формат.
///
/// - Note: Результат кэшируется на 5 минут для повторных запросов с тем же идентификатором.
func fetchUserProfile(id: String, completion: @escaping (Result<UserProfile, Error>) -> Void) {
// реализация
}
/// Загружает профиль пользователя по идентификатору
///
/// Запрос выполняется к эндпоинту `/users/{id}` с авторизацией через Bearer токен.
/// При ошибке сети повторяет запрос до трёх раз с экспоненциальной задержкой.
///
/// - Parameters:
/// - id: Уникальный идентификатор пользователя. Должен соответствовать формату UUID.
/// - completion: Замыкание, вызываемое по завершении запроса. Содержит результат операции.
///
/// - Throws: `NetworkError.invalidURL` если идентификатор имеет неверный формат.
///
/// - Note: Результат кэшируется на 5 минут для повторных запросов с тем же идентификатором.
func fetchUserProfile(id: String, completion: @escaping (Result<UserProfile, Error>) -> Void) {
// реализация
}