Homebox Lens
Android-клиент для системы управления инвентарем Homebox. Позволяет пользователям управлять своим инвентарем, взаимодействуя с экземпляром сервера Homebox.
UI Framework
Пользовательский интерфейс приложения построен с использованием Jetpack Compose, современного декларативного UI-фреймворка от Google. Это обеспечивает быстрое создание, гибкость и поддержку динамических данных.
Асинхронные операции
Все асинхронные операции, такие как сетевые запросы или доступ к базе данных, выполняются с использованием Kotlin Coroutines. Это обеспечивает эффективное управление фоновыми задачами без блокировки основного потока.
Сетевое взаимодействие
Для взаимодействия с API сервера Homebox используется стек технологий: Retrofit для создания типобезопасных HTTP-клиентов, OkHttp в качестве HTTP-клиента и Moshi для парсинга JSON.
Локальное хранилище
Для кэширования данных на устройстве используется библиотека Room. Она предоставляет абстракцию над SQLite и обеспечивает надежное локальное хранение данных.
Библиотека логирования
В проекте используется Timber (timber.log.Timber) для всех целей логирования. Он предоставляет простой и расширяемый API для логирования.
Интернационализация (Мультиязычность)
Приложение должно поддерживать несколько языков для обеспечения доступности для глобальной аудитории.
- Все строки, видимые пользователю, вынесены в `app/src/main/res/values/strings.xml`.
- Язык по умолчанию - русский (ru).
- В коде для доступа к строкам используются ссылки на ресурсы (например, `R.string.app_name`).
Внедрение зависимостей (Dependency Injection)
Для управления зависимостями в проекте используется Hilt. Он интегрирован с компонентами Jetpack и упрощает внедрение зависимостей в Android-приложениях.
Модуль Hilt для зависимостей уровня приложения
AppModule.kt предоставляет зависимости на уровне приложения, такие как контекст приложения и другие синглтоны.
Навигация
Навигация между экранами (Composable-функциями) реализована с помощью библиотеки Navigation Compose, которая является частью Jetpack Navigation.
Навигационный граф
NavGraph.kt определяет структуру навигации приложения, связывая экраны и их маршруты.
Определение маршрутов экранов
Screen.kt определяет все возможные маршруты (экраны) в приложении в виде запечатанного класса для типобезопасной навигации.
Спецификация безопасности проекта.
Все сетевые взаимодействия должны быть защищены HTTPS. Аутентификация пользователя хранится в EncryptedSharedPreferences. Обработка ошибок аутентификации должна включать logout и редирект на экран логина.
Использовать JWT или API-ключ для авторизации запросов. При истечении токена автоматически обновлять.
Локальные данные (credentials) шифровать с помощью Android KeyStore.
Спецификация обработки ошибок.
Все потенциальные ошибки (сеть, БД, валидация) должны быть обработаны с использованием sealed classes для ошибок (e.g., NetworkError, ValidationError) и отображаться пользователю через Snackbar или Dialog.
При сетевых ошибках показывать сообщение "No internet connection" и предлагать retry.
Для HTTP 4xx/5xx отображать user-friendly сообщение на основе response body.
Использовать require/check для контрактов, логировать и показывать toast.
Руководство по использованию иконок
Этот раздел определяет стандартный набор иконок 'androidx.compose.material.icons.Icons.Filled' для использования в приложении. Для некоторых иконок указаны их AutoMirrored версии для корректного отображения в RTL-языках.
Экран панели управления
Отображает сводку по инвентарю, включая статистику, такую как общее количество товаров, общая стоимость и количество по местоположениям/меткам.
Получение и отображение статистики
Использован Flow для reactive обновлений; обработка ошибок через sealed class.
Получение и отображение недавно добавленных товаров
Данные берутся из локального кэша (Room) для быстрого отображения.
Экран списка инвентаря
Отображает список всех инвентарных позиций с возможностью поиска и фильтрации.
Экран сведений о товаре
Показывает все сведения о конкретном инвентарном товаре.
Создание/редактирование/удаление товаров
Позволяет пользователям создавать новые товары, обновлять существующие и удалять их.
Управление метками и местоположениями
Позволяет пользователям просматривать списки всех доступных меток и местоположений.
Экран поиска
Предоставляет специальный пользовательский интерфейс для поиска товаров.
Модель инвентарного товара.
Содержит поля: id, name, description, quantity, location, labels, customFields.
Модель метки.
Содержит поля: id, name, color.
Модель местоположения.
Содержит поля: id, name, parentLocation.
Модель статистики инвентаря.
Содержит поля: totalItems, totalValue, locationsCount, labelsCount.
Модель для создания нового местоположения.
Содержит поля: name, color.
Модель для обновления существующего местоположения.
Содержит поля: name, color.
Модель для обновления существующей метки.
Содержит поля: name, color.
Интерфейс, определяющий контракт для операций с данными, связанными с товарами, метками и местоположениями.
Получает детальную информацию о местоположении по его идентификатору.
Создает новое местоположение.
Обновляет существующее местоположение.
Сценарий использования для получения статистики по инвентарю.
Сценарий использования для получения недавно добавленных товаров.
Сценарий использования для создания нового товара.
Сценарий использования для обновления существующего товара.
Сценарий использования для создания новой метки.
Сценарий использования для удаления товара.
Сценарий использования для получения всех меток.
Сценарий использования для получения всех местоположений.
Сценарий использования для получения деталей товара.
Сценарий использования для аутентификации пользователя.
Сценарий использования для поиска товаров.
Сценарий использования для синхронизации инвентаря.
Сценарий использования для получения детальной информации о местоположении.
Сценарий использования для создания нового местоположения.
Сценарий использования для обновления существующего местоположения.
Сценарий использования для удаления местоположения.
Сценарий использования для обновления существующей метки.
Сценарий использования для удаления метки.
Реализация ItemRepository, координирующая данные из API и локальной БД.
Реализация ItemRepository, координирующая данные из API и локальной БД. Включает методы для работы с товарами, метками и местоположениями.
API endpoint for getting a single location.
API endpoint for creating a location.
API endpoint for updating a location.
Интерфейс сервиса Retrofit для Homebox API.
Определение базы данных Room для локального кэширования.
Главный экран "Панель управления"
Экран предоставляет обзорную информацию и быстрый доступ к основным функциям.
Экран "Локации"
Отображает вертикальный список всех доступных местоположений.
Экран "Метки"
Отображает вертикальный список всех доступных меток.
Экран "Список инвентаря"
Отображает список всех инвентарных позиций с поиском и фильтрацией.
Экран сведений о товаре
Показывает все сведения о конкретном инвентарном товаре.
Экран создания/редактирования товара
Позволяет пользователям создавать новые товары или редактировать существующие.
Экран создания/редактирования местоположения
Позволяет пользователям создавать новые местоположения или редактировать существующие.
Entry point for the Location Edit screen.
Displays the UI for the Location Edit screen.
ViewModel для экрана панели управления.
Обрабатывает бизнес-логику для DashboardScreen, используя сценарии GetStatisticsUseCase и GetRecentlyAddedItemsUseCase.
ViewModel для экрана списка местоположений.
ViewModel для экрана списка меток.
ViewModel для экрана сведений о товаре.
ViewModel для экрана создания/редактирования товара.
ViewModel for the location creation/editing screen.
Manages the UI state, interacts with UseCases, and handles user events for creating and updating locations.
UI state for the Location Edit screen.
ViewModel для экрана поиска.
ViewModel для экрана настройки.
Data Transfer Object for location information.
Contains DTOs for receiving and sending location data, and mappers for conversion to/from domain models.
Data Transfer Object for creating/updating location information.
Used for sending location data to the API.
Converts LocationDto to domain Location model.
Converts domain Location model to LocationCreateDto.