Open VadimMoschenkov opened 3 years ago
WeatherByCityDto.toWeather()
Теперь функция конвертации всегда возвращает дефолтное значение WindDirection.North
(8bf8028)
NetworkAvailabilityInterceptor
Добавил NetworkExtensions.executeSafely()
, в котором в try происходит вызов call.execute()
, а в catch IOException
трансформируется в новый Failure.ServerFailure
.
Почему IOException? В документации Retrofit Call.execute()
:
@throws IOException if a problem occurred talking to the server.
Поэтому, IOException
-> Failure.ServerFailure.
NetworkAvailabilityInterceptor
теперь возвращает Failure.NoInternet
.
Таким образом, теперь различаются ошибки со стороны сервера отличаются от ошибки об отсутствии интернета на устройстве. (71d9ba5)
NetworkModule#provideOkHttpClient
С помощью named(RETROFIT_AUTH)
, в WeatherModule
теперь предоставляется Retrofit с OpenWeatherAuthInterceptor
.
Без указания named
, будет возвращён стандартный Retrofit без дополнительного интерсептора. (28568c4)
MainActivity
Переместил в пакет presentation (было очень трудно). (f694567)
WeatherByCityDto.toWeather()
Метод конвертирует модель data -> domain при этом кидает исключение, но это выглядит немного странно т.к. на случай если данные отсутствуют например есть обработка и подставляется значение -
WindDirection.NORTH
. Поэтому поведение при проверкеisNorth(degree: Int)
которое бросает исключение не понятно. Кроме этого исключение нигде не обрабатывается. Как итог при конвертации вполне допустимо бросать исключения, но в данном случае есть исключение бросается только в одном случае и не понятно почему нельзя подставит дефолтное значениеNetworkAvailabilityInterceptor
Для чего нужен этот класс? ведь ретрофит самостоятельно может бросить исключение по которому можно понять что это ошибка сети.
NetworkHandler
- данный класс только проверяет включен ли интернет на телефоне - это можно использовать например для подсказки пользователю о том что вероятно у него на телефоне отключен интернет. При этом если сервер недоступен или в сети не доступен интернет то ошибка будет другая.NetworkModule#provideOkHttpClient
Общий метод конструирующий
OkHttpClient
, при этом к нему добавляетсяOpenWeatherAuthInterceptor
который актуален только для запросов погоды. В данном приложении так можно делать, но в целом добавлять такой ключ ко всем запросам не имеет смысла, поэтому нужно явно сконфигурировать koin (https://insert-koin.io/docs/reference/koin-core/definitions#definition-naming--default-bindings) что бы собиратьOkHttpClient
с нужными параметрами под ситуацию - в данном случае для вызова методов сервиса погоды нужно добавитьOpenWeatherAuthInterceptor
MainActivity
Главная активити должна находиться в пакете presentation