Skip to content

4440449/BabyTrackerWW

Repository files navigation

#мамавыдохни: трекер

Модуль проекта #мамавыдохни

Многие мамы сталкиваются с проблемой плохого сна у детей. На рынке есть множество предложений в виде приложений с учетом суточного количества сна и бодрствования ребенка и персональными рекомендациями. Уникальность данного приложения состоит в том, что оно работает по мягкой методике налаживания сна (Baby-Led-Sleep) с помощью отслеживания настроения и состояния ребенка вместо подсчета количества сна ребенка и сравнения с общепринятой нормой. Функционал приложения теоретически способен помочь уберечь родителей от применения вредительских методик обучения сну через плач (самозасыпание) и уменьшить давление, оказываемое несоответствием норм сна ребенка.

Tech specs

  • 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

Features

  • Поток данных по схеме:
    Alt text

    1. Cвязь Presenter - View по классической схеме 'запрос-ответ', через протоколы Input-Output
    2. Обратная свзять Interactor - Presenter через обычный биндинг
    3. Помимо состояния Interactor держит репозиторий и осуществляет все взаимодействие с ним
    4. При навигации Interactor шарится на следующие сцены в виде инкапсулированного протоколом объекта (у каждый сцены свой протокол)
  • Работа с бэкендом построена на JSON Patch API
    Решение обсуловлено тем, что бизнес логика подразумевает редактирование таблицы сразу нескольких сущностей в единой операции, по схеме - Редактирование - Принять изменения / Отменить изменения. Что приводит к необходимости использования массовых CRUD операций (+ т.к. таблица дженерик, взаимодействие идет еще и с разными репозиториями). Решение позволяет выполнять единый запрос с заголовком в соостветствии с Patch API 'add' / 'remove' / 'replace' и т.д.
    BaaS с такой возможностью на момент написания кода не нашел, поэтому реализация осталась только на клиентской стороне.

  • DTO
    Для работы в репозитории выделены отдельные сущности с необходимым для осуществления локальной логики пулом параметров.

  • Финальный продукт запакован в SPM и инъектися в основной проект, как обычный пакет.
    Практически вся реализация модуля остается приватной для изменений и вызовов из основного проекта. Точка входа - Bundle пакета, из которого достается Storyboard по соответствующему ключу.

TODO

  • Backend на JSON Patch api
  • In app handling dark mode

Requirements

iOS 13.0 +
Xcode 13.2.1 +
Swift 5 +

HOW TO USE APP

Для добавления нового цикла сна или бодрствования пользователь нажимает на иконку ‘+’ и выбирает подходящие параметры. При необходимости можно оставить комментарий длиной до 500 символов. Выбирайте конкретную дату используя календарь или переключайтесь по дням используя жест смахивания по дате на главном экране.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages