Files
homebox_lens/tech_spec/PROJECT_MANIFEST.xml

623 lines
47 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<PROJECT_MANIFEST>
<!-- ================================================================================== -->
<!-- МЕТАДАННЫЕ ПРОЕКТА -->
<!-- ================================================================================== -->
<METADATA>
<PROJECT_INFO>
<name>Homebox Lens</name>
<description>Android-клиент для системы управления инвентарем Homebox. Позволяет пользователям управлять своим инвентарем, взаимодействуя с экземпляром сервера Homebox.</description>
</PROJECT_INFO>
<TECHNICAL_DECISIONS>
<!-- Общие технические решения -->
<DECISION id="tech_ui_framework" status="implemented">
<summary>UI Framework</summary>
<description>Пользовательский интерфейс приложения построен с использованием Jetpack Compose, современного декларативного UI-фреймворка от Google. Это обеспечивает быстрое создание, гибкость и поддержку динамических данных.</description>
</DECISION>
<DECISION id="tech_async" status="implemented">
<summary>Асинхронные операции</summary>
<description>Все асинхронные операции, такие как сетевые запросы или доступ к базе данных, выполняются с использованием Kotlin Coroutines. Это обеспечивает эффективное управление фоновыми задачами без блокировки основного потока.</description>
</DECISION>
<DECISION id="tech_networking" status="implemented">
<summary>Сетевое взаимодействие</summary>
<description>Для взаимодействия с API сервера Homebox используется стек технологий: Retrofit для создания типобезопасных HTTP-клиентов, OkHttp в качестве HTTP-клиента и Moshi для парсинга JSON.</description>
</DECISION>
<DECISION id="tech_database" status="implemented">
<summary>Локальное хранилище</summary>
<description>Для кэширования данных на устройстве используется библиотека Room. Она предоставляет абстракцию над SQLite и обеспечивает надежное локальное хранение данных.</description>
</DECISION>
<DECISION id="tech_logging" status="implemented">
<summary>Библиотека логирования</summary>
<description>В проекте используется Timber (timber.log.Timber) для всех целей логирования. Он предоставляет простой и расширяемый API для логирования.</description>
</DECISION>
<DECISION id="tech_i18n" status="implemented">
<summary>Интернационализация (Мультиязычность)</summary>
<description>
Приложение должно поддерживать несколько языков для обеспечения доступности для глобальной аудитории.
- Все строки, видимые пользователю, вынесены в `app/src/main/res/values/strings.xml`.
- Язык по умолчанию - русский (ru).
- В коде для доступа к строкам используются ссылки на ресурсы (например, `R.string.app_name`).
</description>
</DECISION>
<!-- Внедрение зависимостей (DI) -->
<DECISION id="tech_di" status="implemented">
<summary>Внедрение зависимостей (Dependency Injection)</summary>
<description>Для управления зависимостями в проекте используется Hilt. Он интегрирован с компонентами Jetpack и упрощает внедрение зависимостей в Android-приложениях.</description>
</DECISION>
<DECISION id="di_app" status="implemented">
<summary>Модуль Hilt для зависимостей уровня приложения</summary>
<description>AppModule.kt предоставляет зависимости на уровне приложения, такие как контекст приложения и другие синглтоны.</description>
</DECISION>
<!-- Навигация -->
<DECISION id="tech_navigation" status="implemented">
<summary>Навигация</summary>
<description>Навигация между экранами (Composable-функциями) реализована с помощью библиотеки Navigation Compose, которая является частью Jetpack Navigation.</description>
</DECISION>
<DECISION id="nav_graph" status="implemented">
<summary>Навигационный граф</summary>
<description>NavGraph.kt определяет структуру навигации приложения, связывая экраны и их маршруты.</description>
</DECISION>
<DECISION id="nav_screen" status="implemented">
<summary>Определение маршрутов экранов</summary>
<description>Screen.kt определяет все возможные маршруты (экраны) в приложении в виде запечатанного класса для типобезопасной навигации.</description>
</DECISION>
</TECHNICAL_DECISIONS>
<SECURITY_SPEC>
<Description>Спецификация безопасности проекта.</Description>
<PRINCIPLE>Все сетевые взаимодействия должны быть защищены HTTPS. Аутентификация пользователя хранится в EncryptedSharedPreferences. Обработка ошибок аутентификации должна включать logout и редирект на экран логина.</PRINCIPLE>
<RULE name="AuthHandling">Использовать JWT или API-ключ для авторизации запросов. При истечении токена автоматически обновлять.</RULE>
<RULE name="DataEncryption">Локальные данные (credentials) шифровать с помощью Android KeyStore.</RULE>
</SECURITY_SPEC>
<ERROR_HANDLING>
<Description>Спецификация обработки ошибок.</Description>
<PRINCIPLE>Все потенциальные ошибки (сеть, БД, валидация) должны быть обработаны с использованием sealed classes для ошибок (e.g., NetworkError, ValidationError) и отображаться пользователю через Snackbar или Dialog.</PRINCIPLE>
<SCENARIO name="NetworkFailure">При сетевых ошибках показывать сообщение "No internet connection" и предлагать retry.</SCENARIO>
<SCENARIO name="ServerError">Для HTTP 4xx/5xx отображать user-friendly сообщение на основе response body.</SCENARIO>
<SCENARIO name="ValidationError">Использовать require/check для контрактов, логировать и показывать toast.</SCENARIO>
</ERROR_HANDLING>
<ICONOGRAPHY_GUIDE>
<summary>Руководство по использованию иконок</summary>
<description>Этот раздел определяет стандартный набор иконок 'androidx.compose.material.icons.Icons.Filled' для использования в приложении. Для некоторых иконок указаны их AutoMirrored версии для корректного отображения в RTL-языках.</description>
<ICON name="AccountBox" path="Icons.Filled.AccountBox" />
<ICON name="AccountCircle" path="Icons.Filled.AccountCircle" />
<ICON name="Add" path="Icons.Filled.Add" />
<ICON name="AddCircle" path="Icons.Filled.AddCircle" />
<ICON name="ArrowBack" path="Icons.AutoMirrored.Filled.ArrowBack" note="Использовать AutoMirrored версию" />
<ICON name="ArrowDropDown" path="Icons.Filled.ArrowDropDown" />
<ICON name="ArrowForward" path="Icons.AutoMirrored.Filled.ArrowForward" note="Использовать AutoMirrored версию" />
<ICON name="Build" path="Icons.Filled.Build" />
<ICON name="Call" path="Icons.Filled.Call" />
<ICON name="Check" path="Icons.Filled.Check" />
<ICON name="CheckCircle" path="Icons.Filled.CheckCircle" />
<ICON name="Clear" path="Icons.Filled.Clear" />
<ICON name="Close" path="Icons.Filled.Close" />
<ICON name="Create" path="Icons.Filled.Create" />
<ICON name="DateRange" path="Icons.Filled.DateRange" />
<ICON name="Delete" path="Icons.Filled.Delete" />
<ICON name="Done" path="Icons.Filled.Done" />
<ICON name="Edit" path="Icons.Filled.Edit" />
<ICON name="Email" path="Icons.Filled.Email" />
<ICON name="ExitToApp" path="Icons.AutoMirrored.Filled.ExitToApp" note="Использовать AutoMirrored версию" />
<ICON name="Face" path="Icons.Filled.Face" />
<ICON name="Favorite" path="Icons.Filled.Favorite" />
<ICON name="FavoriteBorder" path="Icons.Filled.FavoriteBorder" />
<ICON name="Home" path="Icons.Filled.Home" />
<ICON name="Info" path="Icons.AutoMirrored.Filled.Info" note="Использовать AutoMirrored версию" />
<ICON name="KeyboardArrowDown" path="Icons.Filled.KeyboardArrowDown" />
<ICON name="KeyboardArrowLeft" path="Icons.AutoMirrored.Filled.KeyboardArrowLeft" note="Использовать AutoMirrored версию" />
<ICON name="KeyboardArrowRight" path="Icons.AutoMirrored.Filled.KeyboardArrowRight" note="Использовать AutoMirrored версию" />
<ICON name="KeyboardArrowUp" path="Icons.Filled.KeyboardArrowUp" />
<ICON name="Label" path="Icons.AutoMirrored.Filled.Label" note="Использовать AutoMirrored версию" />
<ICON name="List" path="Icons.AutoMirrored.Filled.List" note="Использовать AutoMirrored версию" />
<ICON name="LocationOn" path="Icons.Filled.LocationOn" />
<ICON name="Lock" path="Icons.Filled.Lock" />
<ICON name="MailOutline" path="Icons.Filled.MailOutline" />
<ICON name="Menu" path="Icons.Filled.Menu" />
<ICON name="MoreVert" path="Icons.Filled.MoreVert" />
<ICON name="Notifications" path="Icons.Filled.Notifications" />
<ICON name="Person" path="Icons.Filled.Person" />
<ICON name="Phone" path="Icons.Filled.Phone" />
<ICON name="Place" path="Icons.Filled.Place" />
<ICON name="PlayArrow" path="Icons.Filled.PlayArrow" />
<ICON name="Refresh" path="Icons.Filled.Refresh" />
<ICON name="Search" path="Icons.Filled.Search" />
<ICON name="Send" path="Icons.AutoMirrored.Filled.Send" note="Использовать AutoMirrored версию" />
<ICON name="Settings" path="Icons.Filled.Settings" />
<ICON name="Share" path="Icons.Filled.Share" />
<ICON name="ShoppingCart" path="Icons.Filled.ShoppingCart" />
<ICON name="Star" path="Icons.Filled.Star" />
<ICON name="ThumbUp" path="Icons.Filled.ThumbUp" />
<ICON name="Warning" path="Icons.Filled.Warning" />
</ICONOGRAPHY_GUIDE>
</METADATA>
<!-- ================================================================================== -->
<!-- ГРАФ ПРОЕКТА -->
<!-- ================================================================================== -->
<PROJECT_GRAPH>
<!-- ================================================================================== -->
<!-- КОНЦЕПТУАЛЬНЫЕ УЗЛЫ (ФИЧИ) -->
<!-- ================================================================================== -->
<NODE id="feat_dashboard" type="feature" status="implemented">
<summary>Экран панели управления</summary>
<description>Отображает сводку по инвентарю, включая статистику, такую как общее количество товаров, общая стоимость и количество по местоположениям/меткам.</description>
<RELATIONS>
<EDGE type="HAS_UI" target_id="screen_dashboard"/>
<EDGE type="IMPLEMENTS" target_id="uc_get_stats"/>
<EDGE type="IMPLEMENTS" target_id="uc_get_recent_items"/>
</RELATIONS>
<FUNCTIONALITY>
<FUNCTION id="func_get_stats">
<summary>Получение и отображение статистики</summary>
<implementation_note>Использован Flow для reactive обновлений; обработка ошибок через sealed class.</implementation_note>
</FUNCTION>
<FUNCTION id="func_get_recent_items">
<summary>Получение и отображение недавно добавленных товаров</summary>
<implementation_note>Данные берутся из локального кэша (Room) для быстрого отображения.</implementation_note>
</FUNCTION>
</FUNCTIONALITY>
</NODE>
<NODE id="feat_inventory_list" type="feature" status="implemented">
<summary>Экран списка инвентаря</summary>
<description>Отображает список всех инвентарных позиций с возможностью поиска и фильтрации.</description>
<RELATIONS>
<EDGE type="HAS_UI" target_id="screen_inventory_list"/>
<EDGE type="IMPLEMENTS" target_id="uc_search_items"/>
<EDGE type="IMPLEMENTS" target_id="uc_sync_inventory"/>
</RELATIONS>
</NODE>
<NODE id="feat_item_details" type="feature" status="implemented">
<summary>Экран сведений о товаре</summary>
<description>Показывает все сведения о конкретном инвентарном товаре.</description>
<RELATIONS>
<EDGE type="HAS_UI" target_id="screen_item_details"/>
<EDGE type="IMPLEMENTS" target_id="uc_get_item_details"/>
</RELATIONS>
</NODE>
<NODE id="feat_item_management" type="feature" status="implemented">
<summary>Создание/редактирование/удаление товаров</summary>
<description>Позволяет пользователям создавать новые товары, обновлять существующие и удалять их.</description>
<RELATIONS>
<EDGE type="HAS_UI" target_id="screen_item_edit"/>
<EDGE type="IMPLEMENTS" target_id="uc_create_item"/>
<EDGE type="IMPLEMENTS" target_id="uc_update_item"/>
<EDGE type="IMPLEMENTS" target_id="uc_delete_item"/>
</RELATIONS>
</NODE>
<NODE id="feat_labels_locations" type="feature" status="implemented">
<summary>Управление метками и местоположениями</summary>
<description>Позволяет пользователям просматривать списки всех доступных меток и местоположений.</description>
<RELATIONS>
<EDGE type="HAS_UI" target_id="screen_labels_list"/>
<EDGE type="HAS_UI" target_id="screen_locations_list"/>
<EDGE type="IMPLEMENTS" target_id="uc_get_all_labels"/>
<EDGE type="IMPLEMENTS" target_id="uc_get_all_locations"/>
</RELATIONS>
</NODE>
<NODE id="feat_search" type="feature" status="implemented">
<summary>Экран поиска</summary>
<description>Предоставляет специальный пользовательский интерфейс для поиска товаров.</description>
<RELATIONS>
<EDGE type="HAS_UI" target_id="screen_search"/>
<EDGE type="IMPLEMENTS" target_id="uc_search_items"/>
</RELATIONS>
</NODE>
<!-- ================================================================================== -->
<!-- УЗЛЫ СЛОЯ DOMAIN -->
<!-- ================================================================================== -->
<!-- Data Models -->
<NODE id="model_item" type="data_model" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/model/Item.kt">
<summary>Модель инвентарного товара.</summary>
<description>Содержит поля: id, name, description, quantity, location, labels, customFields.</description>
</NODE>
<NODE id="model_label" type="data_model" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/model/Label.kt">
<summary>Модель метки.</summary>
<description>Содержит поля: id, name, color.</description>
</NODE>
<NODE id="model_location" type="data_model" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/model/Location.kt">
<summary>Модель местоположения.</summary>
<description>Содержит поля: id, name, parentLocation.</description>
</NODE>
<NODE id="model_statistics" type="data_model" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/model/Statistics.kt">
<summary>Модель статистики инвентаря.</summary>
<description>Содержит поля: totalItems, totalValue, locationsCount, labelsCount.</description>
</NODE>
<NODE id="model_location_create" type="data_model" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/model/LocationCreate.kt">
<summary>Модель для создания нового местоположения.</summary>
<description>Содержит поля: name, color.</description>
</NODE>
<NODE id="model_location_update" type="data_model" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/model/LocationUpdate.kt">
<summary>Модель для обновления существующего местоположения.</summary>
<description>Содержит поля: name, color.</description>
</NODE>
<NODE id="model_label_update" type="data_model" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/model/LabelUpdate.kt">
<summary>Модель для обновления существующей метки.</summary>
<description>Содержит поля: name, color.</description>
</NODE>
<!-- Repository Interfaces -->
<NODE id="repo_interface" type="repository_interface" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt">
<summary>Интерфейс, определяющий контракт для операций с данными, связанными с товарами, метками и местоположениями.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="model_item_create"/>
<EDGE type="DEPENDS_ON" target_id="model_item_summary"/>
<EDGE type="DEPENDS_ON" target_id="model_item_out"/>
<EDGE type="DEPENDS_ON" target_id="model_item_update"/>
<EDGE type="DEPENDS_ON" target_id="model_pagination_result"/>
<EDGE type="DEPENDS_ON" target_id="model_group_statistics"/>
<EDGE type="DEPENDS_ON" target_id="model_location_out_count"/>
<EDGE type="DEPENDS_ON" target_id="model_label_out"/>
<EDGE type="DEPENDS_ON" target_id="model_label_create"/>
<EDGE type="DEPENDS_ON" target_id="model_location"/>
<EDGE type="DEPENDS_ON" target_id="model_result"/>
<EDGE type="DEPENDS_ON" target_id="model_location_create"/>
<EDGE type="DEPENDS_ON" target_id="model_location_update"/>
<EDGE type="DEPENDS_ON" target_id="model_label_update"/>
</RELATIONS>
</NODE>
<NODE id="func_get_location_details" type="function" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt">
<summary>Получает детальную информацию о местоположении по его идентификатору.</summary>
<RELATIONS>
<EDGE type="BELONGS_TO" target_id="repo_interface"/>
<EDGE type="RETURNS" target_id="model_location"/>
</RELATIONS>
</NODE>
<NODE id="func_create_location" type="function" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt">
<summary>Создает новое местоположение.</summary>
<RELATIONS>
<EDGE type="BELONGS_TO" target_id="repo_interface"/>
<EDGE type="ACCEPTS" target_id="model_location"/>
</RELATIONS>
</NODE>
<NODE id="func_update_location" type="function" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt">
<summary>Обновляет существующее местоположение.</summary>
<RELATIONS>
<EDGE type="BELONGS_TO" target_id="repo_interface"/>
<EDGE type="ACCEPTS" target_id="model_location"/>
</RELATIONS>
</NODE>
<!-- Use Cases -->
<NODE id="uc_get_stats" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/GetStatisticsUseCase.kt">
<summary>Сценарий использования для получения статистики по инвентарю.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_get_recent_items" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/GetRecentlyAddedItemsUseCase.kt">
<summary>Сценарий использования для получения недавно добавленных товаров.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_create_item" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/CreateItemUseCase.kt">
<summary>Сценарий использования для создания нового товара.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_update_item" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/UpdateItemUseCase.kt">
<summary>Сценарий использования для обновления существующего товара.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_create_label" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/CreateLabelUseCase.kt">
<summary>Сценарий использования для создания новой метки.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_delete_item" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteItemUseCase.kt">
<summary>Сценарий использования для удаления товара.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_get_all_labels" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLabelsUseCase.kt">
<summary>Сценарий использования для получения всех меток.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_get_all_locations" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLocationsUseCase.kt">
<summary>Сценарий использования для получения всех местоположений.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_get_item_details" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/GetItemDetailsUseCase.kt">
<summary>Сценарий использования для получения деталей товара.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_login" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/LoginUseCase.kt">
<summary>Сценарий использования для аутентификации пользователя.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_search_items" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/SearchItemsUseCase.kt">
<summary>Сценарий использования для поиска товаров.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_sync_inventory" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/SyncInventoryUseCase.kt">
<summary>Сценарий использования для синхронизации инвентаря.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_get_location_details" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/GetLocationDetailsUseCase.kt">
<summary>Сценарий использования для получения детальной информации о местоположении.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_create_location" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/CreateLocationUseCase.kt">
<summary>Сценарий использования для создания нового местоположения.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_update_location" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/UpdateLocationUseCase.kt">
<summary>Сценарий использования для обновления существующего местоположения.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_delete_location" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteLocationUseCase.kt">
<summary>Сценарий использования для удаления местоположения.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_update_label" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/UpdateLabelUseCase.kt">
<summary>Сценарий использования для обновления существующей метки.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<NODE id="uc_delete_label" type="use_case" status="implemented" file_path="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteLabelUseCase.kt">
<summary>Сценарий использования для удаления метки.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="repo_interface"/>
</RELATIONS>
</NODE>
<!-- ================================================================================== -->
<!-- УЗЛЫ СЛОЯ DATA -->
<!-- ================================================================================== -->
<NODE id="repo_impl" type="repository_implementation" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt">
<summary>Реализация ItemRepository, координирующая данные из API и локальной БД.</summary>
<description>Реализация ItemRepository, координирующая данные из API и локальной БД. Включает методы для работы с товарами, метками и местоположениями.</description>
<RELATIONS>
<EDGE type="IMPLEMENTS" target_id="repo_interface"/>
<EDGE type="DEPENDS_ON" target_id="api_service"/>
<EDGE type="DEPENDS_ON" target_id="database"/>
<EDGE type="CALLS" target_id="api_service_get_location"/>
<EDGE type="CALLS" target_id="api_service_create_location"/>
<EDGE type="CALLS" target_id="api_service_update_location"/>
<EDGE type="DEPENDS_ON" target_id="func_location_to_domain"/>
<EDGE type="DEPENDS_ON" target_id="func_location_to_create_dto"/>
</RELATIONS>
</NODE>
<NODE id="api_service_get_location" type="api_endpoint" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt">
<summary>API endpoint for getting a single location.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="dto_location"/>
</RELATIONS>
</NODE>
<NODE id="api_service_create_location" type="api_endpoint" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt">
<summary>API endpoint for creating a location.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="dto_location_create"/>
</RELATIONS>
</NODE>
<NODE id="api_service_update_location" type="api_endpoint" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt">
<summary>API endpoint for updating a location.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="dto_location_create"/>
</RELATIONS>
</NODE>
<NODE id="api_service" type="api_service" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt">
<summary>Интерфейс сервиса Retrofit для Homebox API.</summary>
</NODE>
<NODE id="database" type="database" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/db/HomeboxDatabase.kt">
<summary>Определение базы данных Room для локального кэширования.</summary>
</NODE>
<!-- ================================================================================== -->
<!-- УЗЛЫ СЛОЯ APP -->
<!-- ================================================================================== -->
<!-- UI Screens -->
<NODE id="screen_dashboard" type="ui_screen" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt">
<summary>Главный экран "Панель управления"</summary>
<description>Экран предоставляет обзорную информацию и быстрый доступ к основным функциям.</description>
<RELATIONS>
<EDGE type="HAS_VIEWMODEL" target_id="vm_dashboard"/>
</RELATIONS>
<LAYOUT>
<COMPONENT type="TopAppBar" description="Верхняя панель с иконкой навигационного меню и сканера."/>
<COMPONENT type="NavigationDrawer" description="Боковое меню с разделами: Главная, Локации, Поиск, Профиль, Выйти."/>
<COMPONENT type="MainContent" orientation="vertical" scrollable="true">
<SUB_COMPONENT type="Section" title="Быстрая статистика" description="Сетка из 2x2 карточек (стоимость, вещи, локации, метки)."/>
<SUB_COMPONENT type="Section" title="Недавно добавлено" description="Горизонтальный список карточек недавних предметов."/>
</COMPONENT>
</LAYOUT>
<USER_INTERACTIONS>
<INTERACTION action="Нажатие на чип местоположения/метки" reaction="Навигация на экран списка инвентаря с фильтром."/>
<INTERACTION action="Нажатие на кнопку 'Создать'" reaction="Открытие экрана редактирования нового товара."/>
</USER_INTERACTIONS>
</NODE>
<NODE id="screen_locations_list" type="ui_screen" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt">
<summary>Экран "Локации"</summary>
<description>Отображает вертикальный список всех доступных местоположений.</description>
<RELATIONS>
<EDGE type="HAS_VIEWMODEL" target_id="vm_locations_list"/>
</RELATIONS>
<LAYOUT>
<COMPONENT type="List" name="LocationsList" description="Вертикальный, прокручиваемый список (LazyColumn) всех местоположений."/>
<COMPONENT type="FloatingActionButton" icon="add" description="Кнопка для добавления нового местоположения."/>
</LAYOUT>
<USER_INTERACTIONS>
<INTERACTION action="Нажатие на элемент списка локаций" reaction="Навигация на экран списка инвентаря, отфильтрованного по локации."/>
</USER_INTERACTIONS>
</NODE>
<NODE id="screen_labels_list" type="ui_screen" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt">
<summary>Экран "Метки"</summary>
<description>Отображает вертикальный список всех доступных меток.</description>
<RELATIONS>
<EDGE type="HAS_VIEWMODEL" target_id="vm_labels_list"/>
</RELATIONS>
</NODE>
<NODE id="screen_inventory_list" type="ui_screen" status="stub" file_path="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListScreen.kt">
<summary>Экран "Список инвентаря"</summary>
<description>Отображает список всех инвентарных позиций с поиском и фильтрацией.</description>
<RELATIONS>
<EDGE type="HAS_VIEWMODEL" target_id="vm_inventory_list"/>
</RELATIONS>
</NODE>
<NODE id="screen_item_details" type="ui_screen" status="stub" file_path="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsScreen.kt">
<summary>Экран сведений о товаре</summary>
<description>Показывает все сведения о конкретном инвентарном товаре.</description>
<RELATIONS>
<EDGE type="HAS_VIEWMODEL" target_id="vm_item_details"/>
</RELATIONS>
</NODE>
<NODE id="screen_item_edit" type="ui_screen" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditScreen.kt">
<summary>Экран создания/редактирования товара</summary>
<description>Позволяет пользователям создавать новые товары или редактировать существующие.</description>
<RELATIONS>
<EDGE type="HAS_VIEWMODEL" target_id="vm_item_edit"/>
</RELATIONS>
</NODE>
<NODE id="screen_location_edit" type="ui_screen" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/locationedit/LocationEditScreen.kt">
<summary>Экран создания/редактирования местоположения</summary>
<description>Позволяет пользователям создавать новые местоположения или редактировать существующие.</description>
<RELATIONS>
<EDGE type="HAS_VIEWMODEL" target_id="vm_location_edit"/>
</RELATIONS>
</NODE>
<NODE id="func_location_edit_screen" type="function" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/locationedit/LocationEditScreen.kt">
<summary>Entry point for the Location Edit screen.</summary>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="vm_location_edit"/>
<EDGE type="CALLS" target_id="func_location_edit_content"/>
</RELATIONS>
</NODE>
<NODE id="func_location_edit_content" type="function" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/locationedit/LocationEditScreen.kt">
<summary>Displays the UI for the Location Edit screen.</summary>
<RELATIONS>
<EDGE type="CONSUMES_STATE" target_id="data_class_ui_state_location_edit_viewmodel"/>
</RELATIONS>
</NODE>
<!-- ViewModels -->
<NODE id="vm_dashboard" type="view_model" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardViewModel.kt">
<summary>ViewModel для экрана панели управления.</summary>
<description>Обрабатывает бизнес-логику для DashboardScreen, используя сценарии GetStatisticsUseCase и GetRecentlyAddedItemsUseCase.</description>
<RELATIONS>
<EDGE type="CALLS" target_id="uc_get_stats"/>
<EDGE type="CALLS" target_id="uc_get_recent_items"/>
</RELATIONS>
</NODE>
<NODE id="vm_locations_list" type="view_model" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListViewModel.kt">
<summary>ViewModel для экрана списка местоположений.</summary>
<RELATIONS>
<EDGE type="CALLS" target_id="uc_get_all_locations"/>
</RELATIONS>
</NODE>
<NODE id="vm_labels_list" type="view_model" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListViewModel.kt">
<summary>ViewModel для экрана списка меток.</summary>
<RELATIONS>
<EDGE type="CALLS" target_id="uc_get_all_labels"/>
</RELATIONS>
</NODE>
<NODE id="vm_item_details" type="view_model" status="stub" file_path="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsViewModel.kt">
<summary>ViewModel для экрана сведений о товаре.</summary>
<RELATIONS>
<EDGE type="CALLS" target_id="uc_get_item_details"/>
</RELATIONS>
</NODE>
<NODE id="vm_item_edit" type="view_model" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditViewModel.kt">
<summary>ViewModel для экрана создания/редактирования товара.</summary>
<RELATIONS>
<EDGE type="CALLS" target_id="uc_create_item"/>
<EDGE type="CALLS" target_id="uc_update_item"/>
</RELATIONS>
</NODE>
<NODE id="vm_location_edit" type="view_model" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/locationedit/LocationEditViewModel.kt">
<summary>ViewModel for the location creation/editing screen.</summary>
<description>Manages the UI state, interacts with UseCases, and handles user events for creating and updating locations.</description>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="uc_get_location_details"/>
<EDGE type="DEPENDS_ON" target_id="uc_create_location"/>
<EDGE type="DEPENDS_ON" target_id="uc_update_location"/>
<EDGE type="EMITS_STATE" target_id="data_class_ui_state_location_edit_viewmodel"/>
</RELATIONS>
</NODE>
<NODE id="data_class_ui_state_location_edit_viewmodel" type="data_model" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/locationedit/LocationEditViewModel.kt">
<summary>UI state for the Location Edit screen.</summary>
</NODE>
<NODE id="vm_search" type="view_model" status="stub" file_path="app/src/main/java/com/homebox/lens/ui/screen/search/SearchViewModel.kt">
<summary>ViewModel для экрана поиска.</summary>
<RELATIONS>
<EDGE type="CALLS" target_id="uc_search_items"/>
</RELATIONS>
</NODE>
<NODE id="vm_setup" type="view_model" status="implemented" file_path="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupViewModel.kt">
<summary>ViewModel для экрана настройки.</summary>
<RELATIONS>
<EDGE type="CALLS" target_id="uc_login"/>
</RELATIONS>
</NODE>
<!-- New Nodes for Location DTOs and Mappers -->
<NODE id="dto_location" type="data_model" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/dto/LocationDto.kt">
<summary>Data Transfer Object for location information.</summary>
<description>Contains DTOs for receiving and sending location data, and mappers for conversion to/from domain models.</description>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="model_location"/>
</RELATIONS>
</NODE>
<NODE id="dto_location_create" type="data_model" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/dto/LocationDto.kt">
<summary>Data Transfer Object for creating/updating location information.</summary>
<description>Used for sending location data to the API.</description>
<RELATIONS>
<EDGE type="DEPENDS_ON" target_id="model_location"/>
</RELATIONS>
</NODE>
<NODE id="func_location_to_domain" type="function" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/dto/LocationDto.kt">
<summary>Converts LocationDto to domain Location model.</summary>
<RELATIONS>
<EDGE type="CONVERTS" target_id="model_location"/>
</RELATIONS>
</NODE>
<NODE id="func_location_to_create_dto" type="function" status="implemented" file_path="data/src/main/java/com/homebox/lens/data/api/dto/LocationDto.kt">
<summary>Converts domain Location model to LocationCreateDto.</summary>
<RELATIONS>
<EDGE type="CONVERTS" target_id="dto_location_create"/>
</RELATIONS>
</NODE>
</PROJECT_GRAPH>
</PROJECT_MANIFEST>