Модуль проекта #мамавыдохни
Многие мамы сталкиваются с проблемой плохого сна у детей. На рынке есть множество предложений в виде приложений с учетом суточного количества сна и бодрствования ребенка и персональными рекомендациями. Уникальность данного приложения состоит в том, что оно работает по мягкой методике налаживания сна (Baby-Led-Sleep) с помощью отслеживания настроения и состояния ребенка вместо подсчета количества сна ребенка и сравнения с общепринятой нормой. Функционал приложения теоретически способен помочь уберечь родителей от применения вредительских методик обучения сну через плач (самозасыпание) и уменьшить давление, оказываемое несоответствием норм сна ребенка.
- MVP + R + I(State + Actions). Элементы Clean architecture
- Каждый экран выделен в отдельную сцену со своим окружением (Configurator, Presenter, Router)
- Interactor в качестве общего State для приложения
- UI - UIKit Storyboard
- Навигация через Storyboard segues + Router
- Generic подход при работе с TableView (одновременно используются разныме типы данных закрытые одним протоколом)
- Переиспользуемая сцена
- Кастомный Task management через обертку над URLSessionTask
- Observing через собственную библиотеку
- Network через собственную библиотеку
- Backend - JSON Patch Api (подробнее ниже в разделе Features)
- Local storage - Core data
- XCTests на логику Data слоя
- Dark mode
- Custom navigation transition
-
- Cвязь Presenter - View по классической схеме 'запрос-ответ', через протоколы Input-Output
- Обратная свзять Interactor - Presenter через обычный биндинг
- Помимо состояния Interactor держит репозиторий и осуществляет все взаимодействие с ним
- При навигации Interactor шарится на следующие сцены в виде инкапсулированного протоколом объекта (у каждый сцены свой протокол)
-
Работа с бэкендом построена на JSON Patch API
Решение обсуловлено тем, что бизнес логика подразумевает редактирование таблицы сразу нескольких сущностей в единой операции, по схеме -Редактирование - Принять изменения / Отменить изменения
. Что приводит к необходимости использования массовых CRUD операций (+ т.к. таблица дженерик, взаимодействие идет еще и с разными репозиториями). Решение позволяет выполнять единый запрос с заголовком в соостветствии с Patch API'add' / 'remove' / 'replace' и т.д.
BaaS с такой возможностью на момент написания кода не нашел, поэтому реализация осталась только на клиентской стороне. -
DTO
Для работы в репозитории выделены отдельные сущности с необходимым для осуществления локальной логики пулом параметров. -
Финальный продукт запакован в SPM и инъектися в основной проект, как обычный пакет.
Практически вся реализация модуля остается приватной для изменений и вызовов из основного проекта. Точка входа - Bundle пакета, из которого достается Storyboard по соответствующему ключу.
- Backend на JSON Patch api
- In app handling dark mode
iOS 13.0 +
Xcode 13.2.1 +
Swift 5 +
Для добавления нового цикла сна или бодрствования пользователь нажимает на иконку ‘+’ и выбирает подходящие параметры. При необходимости можно оставить комментарий длиной до 500 символов. Выбирайте конкретную дату используя календарь или переключайтесь по дням используя жест смахивания по дате на главном экране.