Необходимо реализовать логику получения данных для отображения виджета с информацией о пользователе.
Метод 1: BundlesApi.getBundles()
Результат запроса должен представляться списком объектов типа BundleInfo и получаться из JSON jsonProvider.bundlesJson.
Полученные данные нужно сохранять в кеш. До совершения сетевого запроса нужно проверять наличие кеша (если непусто, то сразу возвращать данные)
Метод 2: OffersApi.getOffers(userId=<ID пользователя>, recomendation=true/false)
Значение параметра recomendation равно true или false в зависимости от вызываемого метода
Результат запроса должен представляться массивом модели OfferInfo и получаться из JSON jsonProvider.offersJson
Возможные значения для поля type объекта bonuses:
- cashback – кэшбэк (процент)
- special_points – бонусные баллы
valueвbonuses– дробное число
Массив restrictions содержит ограничения по отображению и доступности спецпредложения (может быть пустой, но поле обязательное). Возможные значения элементов:
for_bundles– описывает ограничения по подпискам. Внутри содержится массивbundles_idsс кодами подписок, для которых доступно данное спецпредложение, а такжеnewValue, которое указывает то, на какое значение необходимо заменить бонус изbonuses->value
Метод 3: OffersApi.getFullOffer(userId = <ID пользователя>, id=<ID спецпредложения>)
Результат запроса должен представляться моделью OfferFullInfo и получаться из JSON jsonProvider.offersJson
Контракт объекта спецпредложения содержит в себе все то, что описано в запросе 2. Особенностью данного метода является то, что он содержит расширенную информацию об конкретном спецпредложении.
- Необходимо реализовать
DefaultBundlesApi, который получает JSON изjsonProvider.bundlesJsonи возвращает список объектов типаBundleInfo DefaultBundlesApiдолжен реализовывать интерфейсBundlesApi- Необходимо реализовать
DefaultOffersApi, который получает JSON изjsonProvider.offersJsonи возвращает список объектов типаOfferInfoв одном методе и объект типаOfferFullInfoв другом DefaultOffersApiдолжен реализовывать интерфейсOffersApi- Необходимо реализовать
BundlesRepositoryImplдля данных о подписках и выбора между данными из кешаBundlesLocalDataSourceилиBundlesRemoteDataSourceв зависимости от наличия данных. BundlesRepositoryImplдолжен реализовывать интерфейсBundlesRepository