Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Модуль cart-utils - управление корзиной с товарами и синхронизация с сервером
Использовать в реальном проекте возможно будет трудно, т.к. требования и стек проекта могут сильно отличаться
Но можно брать за идею
LocalCartRepositoryи другие классы из модуляКорзина с похожими методами реализована на проектах Петшоп и Лукойл
CartModel- абстрактный класс корзины с товарамиProductModel- абстрактный класс товараIRemoteCartRepository- интерфейс репозитория, из которого отправляются запросы на изменение корзиныLocalCartRepository- локальная корзина, на которую можно подписаться на разных экранах приложенияRequestsQueue- очередь для последовательного выполнения для избежания гонки запросовCartUpdateManager- комбинация локальной и северной корзинысуть такая:
добавили товар в корзину
изменения прилетели на все экраны по подписке
запрос добавился в очередь
...
несколько таких запросов успешно выполнились
если в очереди больше нет запросов, происходит слияние корзин, корзина с сервера отображается на экранах
также есть поддержка:
удаленных товаров (которые есть локально, но нет на сервере, позиция товара в списке сохраняется)
промокодов и расчет общей скидки (по проценту и по сумме)
бонусов у товаров и бонусов к списанию в корзине
обработки ошибок в запросах - при ошибках корзина может перезапрашиваться с сервера n-раз