Skip to content

alexxk2/OnlineShop

Repository files navigation

OnlineShop

Приложение - онлайн магазин косметических средств. Приложение состоит из 5 главных экранов и нескольких дополнительных. Реализована регистрация пользователя с сохранением данных для следующего входа (данные хранятся в базе данных). Осноные экраны - каталог, детали товара и просмотр избранных товаров.

Стартовый экран и экран регистрации
В приложении реализован стартовый экрна, логика которого определяет есть ли сохраненный пользователь в базе данных или у нас новый пользователь. В случае нового пользователя - старнтовый экране откроет регистрации, в противном случае - сразу каталог . Экран регистрации валидирует вводимые значения и сохраняет данные пользователя в базу данных; при успешном вводе открывает каталог.

Экран "Каталог"
На экране каталога отображаются товары. Пользователь может отсортировать товары тремя способами - по популярности, по возрастанию и убыванию цены. На экране также присутствуют теги (chip group) с помощью которых можно отфильтровать список отображемых товаров. Сортировка на отфильтрованном списке сохраняется и её можно поменять. На элементе списка товаров есть кнопки добавить и удалить из избранного. Для лучшего визуального восприятия товара реализована карусель изображений.

Экран "Детали"
При клике на товар пользователь попадет на экран деталей, где сможет посмотреть подробности, цену, увеличенное изображение товара и т.д. На экране деталей также есть кнопки добавить/удалить из избранного, при изменеии статуса товара в избранном статус также поменяется и на экране "Каталог".

Экран "Профиль"
На экране профиля пользователь видит данные о себе и избранных товарах. Выход из приложения осуществляется по нажатию на кнопку выйти, в этом случае стираются все данные о пользователе и его избранных товарах.

Экран "Избранное
Экран реализован в виде двух табов, между которыми можно перемещатся свайпом или нажатием. На экране отображаются избранные товары, есть возможность удалить товар из избранного или перейти в детали товара.

Остальные экраны находятся в разработке.

Технические детали реализации

  • Приложение создано по принципам чистой архитектуры и SOLID, есть 3 слоя (data, domain, presentation). Связь между слоями осуществляется через интерфейсы.
  • Используется паттерн MVVM в презентейшн слое.
  • В качетсве библиотеки для DI выбрана библиотека Hilt.
  • Приложения реализовано по принципу единой активити с фрагментами, навигация через navigation component и safe args.
  • Получение данных реализовано с помощью Retrofit и корутин.
  • Избранные товары и данные о пользователе хранятся в SQlite базе данные, библиотека Room и корутины.
  • Списки сделаны через recyclerView и ListAdapter + Diffutil.
  • Все по работе с данными лежит в data слое, некоторая часть бизнес логики (фильтрация и сортировка) в domain.
  • На экране каталога и избранного реализована LCE модель управления состоянием экрана (loading, content, error).
  • Валидация вводимого номера телефона реализована с помощью библиотеки Tinkoff decoro. Работа с UI через viewBinding.
  • Карусели избражений и табы в избранном реализованы через viewPager2 и tabLayout.

Используемый стек

  • Kotlin
  • Clean Architecture
  • Hilt
  • Retrofit
  • Room
  • SOLID
  • MVVM (ViewModel, LiveData)
  • RecyclerView
  • ViewBinding
  • Navigation Component
  • Glide
  • Tinkoff decoro
  • Coroutines

Запись работы основных экранов
Стартовый и регистрация







Экран "Каталог" и ошибка NoInternet









Экран деталей







Экран избранного