using DD.Persistence.Client.CustomExceptions; using Refit; using System.ComponentModel.DataAnnotations; namespace DD.Persistence.Client.Helpers; public static class ExceptionsHelper { private static readonly Dictionary ExceptionsDictionary = new Dictionary() { { System.Net.HttpStatusCode.BadRequest, new ValidationException("Ошибка валидации, формата или маршрутизации запроса") }, { System.Net.HttpStatusCode.Unauthorized, new UnauthorizedAccessException("Ошибка авторизации, клиент должен аутентифицировать себя, чтобы получить запрошенный ответ") }, { System.Net.HttpStatusCode.Forbidden, new ForbiddenException("Клиент известен серверу, но он неавторизован") }, { System.Net.HttpStatusCode.NotFound, new EntryPointNotFoundException("Сервер не может найти запрошенный ресурс") }, { System.Net.HttpStatusCode.MethodNotAllowed, new MethodAccessException("Обращение запрещено") }, { System.Net.HttpStatusCode.NotAcceptable, new AcceptableException("После выполнения согласования контента не найдено содержимого, соответствующего заданным критериям") }, { System.Net.HttpStatusCode.RequestTimeout, new TimeoutException("Время ожидания истекло") }, { System.Net.HttpStatusCode.Locked, new LockedException("Запрашиваемый ресурс заблокирован") }, { System.Net.HttpStatusCode.TooManyRequests, new TooManyRequestsException("Пользователь отправил слишком много запросов в определённый промежуток времени") }, { System.Net.HttpStatusCode.InternalServerError, new InternalServerException("На сервере произошла ошибка, в результате которой он не может успешно обработать запрос") }, { System.Net.HttpStatusCode.NotImplemented, new NotImplementedException("Метод запроса не поддерживается сервером") }, { System.Net.HttpStatusCode.BadGateway, new BadGatewayException("В процессе обработки запроса полуен недопустимый ответ от целевого сервера") }, { System.Net.HttpStatusCode.ServiceUnavailable, new ServiceUnavailableException("В процессе обработки запроса полуен недопустимый ответ от целевого сервера") }, { System.Net.HttpStatusCode.GatewayTimeout, new TimeoutException("Время ожидания целевого сервера истекло") } }; public static Exception GetPersistenceException(this IApiResponse response) { ExceptionsDictionary .TryGetValue(response.StatusCode, out var exception); var result = exception ?? new Exception("Неопознанная ошибка"); return result; } }