1534 lines
144 KiB
XML
1534 lines
144 KiB
XML
<?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>
|
||
<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="object_versions" type="Object" name="Versions" file_path="./buildSrc/src/main/java/Dependencies.kt" package="buildsrc.dependencies">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>build, dependencies</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="object_libs" type="Object" name="Libs" file_path="./buildSrc/src/main/java/Dependencies.kt" package="buildsrc.dependencies">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>build, dependencies</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_navgraph" type="Function" name="NavGraph" file_path="./app/src/main/java/com/homebox/lens/navigation/NavGraph.kt" package="com.homebox.lens.navigation">
|
||
<SUMMARY>Определяет граф навигации для всего приложения с использованием Jetpack Compose Navigation.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>navigation, compose, nav_host</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavHostController" />
|
||
<RELATION type="CREATES_INSTANCE_OF" target_id="NavigationActions" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="sealed_class_screen" type="SealedClass" name="Screen" file_path="./app/src/main/java/com/homebox/lens/navigation/Screen.kt" package="com.homebox.lens.navigation">
|
||
<SUMMARY>Запечатанный класс для определения маршрутов навигации в приложении.</SUMMARY>
|
||
<DESCRIPTION>Обеспечивает типобезопасность при навигации. @param route Строковый идентификатор маршрута. / sealed class Screen(val route: String) { // [ENTITY: Object('Setup')] data object Setup : Screen("setup_screen") // [END_ENTITY: Object('Setup')] // [ENTITY: Object('Dashboard')] data object Dashboard : Screen("dashboard_screen") // [END_ENTITY: Object('Dashboard')] // [ENTITY: Object('InventoryList')] data object InventoryList : Screen("inventory_list_screen") { // [ENTITY: Function('withFilter')] /** @summary Создает маршрут для экрана списка инвентаря с параметром фильтра. @param key Ключ фильтра (например, "label" или "location"). @param value Значение фильтра (например, ID метки или местоположения). @return Строку полного маршрута с query-параметром. @throws IllegalArgumentException если ключ или значение пустые. / fun withFilter(key: String, value: String): String { require(key.isNotBlank()) { "Filter key cannot be blank." } require(value.isNotBlank()) { "Filter value cannot be blank." } val constructedRoute = "inventory_list_screen?$key=$value" check(constructedRoute.contains("?$key=$value")) { "Route must contain the filter query." } return constructedRoute } // [END_ENTITY: Function('withFilter')] } // [END_ENTITY: Object('InventoryList')] // [ENTITY: Object('ItemDetails')] data object ItemDetails : Screen("item_details_screen/{itemId}") { // [ENTITY: Function('createRoute')] /** @summary Создает маршрут для экрана деталей элемента с указанным ID. @param itemId ID элемента для отображения. @return Строку полного маршрута. @throws IllegalArgumentException если itemId пустой. / fun createRoute(itemId: String): String { require(itemId.isNotBlank()) { "itemId не может быть пустым." } val route = "item_details_screen/$itemId" check(route.endsWith(itemId)) { "Маршрут должен заканчиваться на itemId." } return route } // [END_ENTITY: Function('createRoute')] } // [END_ENTITY: Object('ItemDetails')] // [ENTITY: Object('ItemEdit')] data object ItemEdit : Screen("item_edit_screen?itemId={itemId}") { // [ENTITY: Function('createRoute')] /** @summary Создает маршрут для экрана редактирования элемента с указанным ID. @param itemId ID элемента для редактирования. Null, если создается новый элемент. @return Строку полного маршрута. / fun createRoute(itemId: String? = null): String { return itemId?.let { "item_edit_screen?itemId=$it" } ?: "item_edit_screen" } // [END_ENTITY: Function('createRoute')] } // [END_ENTITY: Object('ItemEdit')] // [ENTITY: Object('LabelsList')] data object LabelsList : Screen("labels_list_screen") // [END_ENTITY: Object('LabelsList')] // [ENTITY: Object('LabelEdit')] data object LabelEdit : Screen("label_edit_screen?labelId={labelId}") { // [ENTITY: Function('createRoute')] /** @summary Создает маршрут для экрана редактирования метки с указанным ID. @param labelId ID метки для редактирования. Null, если создается новая метка. @return Строку полного маршрута. / fun createRoute(labelId: String? = null): String { return labelId?.let { "label_edit_screen?labelId=$it" } ?: "label_edit_screen" } // [END_ENTITY: Function('createRoute')] } // [END_ENTITY: Object('LabelEdit')] // [ENTITY: Object('LocationsList')] data object LocationsList : Screen("locations_list_screen") // [END_ENTITY: Object('LocationsList')] // [ENTITY: Object('LocationEdit')] data object LocationEdit : Screen("location_edit_screen/{locationId}") { // [ENTITY: Function('createRoute')] /** @summary Создает маршрут для экрана редактирования местоположения с указанным ID. @param locationId ID местоположения для редактирования. @return Строку полного маршрута. @throws IllegalArgumentException если locationId пустой. / fun createRoute(locationId: String): String { require(locationId.isNotBlank()) { "locationId не может быть пустым." } val route = "location_edit_screen/$locationId" check(route.endsWith(locationId)) { "Маршрут должен заканчиваться на locationId." } return route } // [END_ENTITY: Function('createRoute')] } // [END_ENTITY: Object('LocationEdit')] // [ENTITY: Object('Search')] data object Search : Screen("search_screen") // [END_ENTITY: Object('Search')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>navigation, routes, sealed_class</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="class_navigationactions" type="Class" name="NavigationActions" file_path="./app/src/main/java/com/homebox/lens/navigation/NavigationActions.kt" package="com.homebox.lens.navigation">
|
||
<SUMMARY>Класс-обертка над NavHostController для предоставления типизированных навигационных действий.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>navigation, controller, actions</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavHostController" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="application_mainapplication" type="Application" name="MainApplication" file_path="./app/src/main/java/com/homebox/lens/MainApplication.kt" package="com.homebox.lens">
|
||
<SUMMARY>Точка входа в приложение. Инициализирует Hilt и Timber.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>application, hilt, timber</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_appdrawercontent" type="Function" name="AppDrawerContent" file_path="./app/src/main/java/com/homebox/lens/ui/common/AppDrawer.kt" package="com.homebox.lens.ui.common">
|
||
<SUMMARY>Контент для бокового навигационного меню (Drawer).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, common, navigation_drawer</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_mainscaffold" type="Function" name="MainScaffold" file_path="./app/src/main/java/com/homebox/lens/ui/common/MainScaffold.kt" package="com.homebox.lens.ui.common">
|
||
<SUMMARY>Общая обертка для экранов, включающая Scaffold и Navigation Drawer.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, common, scaffold, navigation_drawer</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
<RELATION type="CALLS" target_id="AppDrawerContent" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_homeboxlenstheme" type="Function" name="HomeboxLensTheme" file_path="./app/src/main/java/com/homebox/lens/ui/theme/Theme.kt" package="com.homebox.lens.ui.theme">
|
||
<SUMMARY>The main theme for the Homebox Lens application.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, theme</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="Typography" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_structure_typography" type="DataStructure" name="Typography" file_path="./app/src/main/java/com/homebox/lens/ui/theme/Typography.kt" package="com.homebox.lens.ui.theme">
|
||
<SUMMARY>Defines the typography for the application.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, theme, typography</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="sealed_interface_dashboarduistate" type="SealedInterface" name="DashboardUiState" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardUiState.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Определяет все возможные состояния для экрана "Дэшборд".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, state, dashboard</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="GroupStatistics" />
|
||
<RELATION type="DEPENDS_ON" target_id="LocationOutCount" />
|
||
<RELATION type="DEPENDS_ON" target_id="LabelOut" />
|
||
<RELATION type="DEPENDS_ON" target_id="ItemSummary" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_dashboardscreen" type="Function" name="DashboardScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Главная Composable-функция для экрана "Панель управления".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="DashboardViewModel" />
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
<RELATION type="CALLS" target_id="MainScaffold" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_dashboardcontent" type="Function" name="DashboardContent" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Отображает основной контент экрана в зависимости от uiState.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="CONSUMES_STATE" target_id="DashboardUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_statisticssection" type="Function" name="StatisticsSection" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Секция для отображения общей статистики.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="GroupStatistics" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_statisticcard" type="Function" name="StatisticCard" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Карточка для отображения одного статистического показателя.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_recentlyaddedsection" type="Function" name="RecentlyAddedSection" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Секция для отображения недавно добавленных элементов.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemSummary" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_itemcard" type="Function" name="ItemCard" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Карточка для отображения краткой информации об элементе.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemSummary" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_locationssection" type="Function" name="LocationsSection" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Секция для отображения местоположений в виде чипсов.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LocationOutCount" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_labelssection" type="Function" name="LabelsSection" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>Секция для отображения меток в виде чипсов.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LabelOut" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_dashboardcontentsuccesspreview" type="Function" name="DashboardContentSuccessPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_dashboardcontentloadingpreview" type="Function" name="DashboardContentLoadingPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_dashboardcontenterrorpreview" type="Function" name="DashboardContentErrorPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, dashboard, compose, navigation</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="view_model_dashboardviewmodel" type="ViewModel" name="DashboardViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardViewModel.kt" package="com.homebox.lens.ui.screen.dashboard">
|
||
<SUMMARY>ViewModel для главного экрана (Dashboard).</SUMMARY>
|
||
<DESCRIPTION>Оркестрирует загрузку данных для Dashboard, используя строгую модель состояний (`DashboardUiState`), и обрабатывает параллельные запросы без состояний гонки. @invariant `uiState` всегда является одним из состояний, определенных в `DashboardUiState`. / @HiltViewModel class DashboardViewModel @Inject constructor( private val getStatisticsUseCase: GetStatisticsUseCase, private val getAllLocationsUseCase: GetAllLocationsUseCase, private val getAllLabelsUseCase: GetAllLabelsUseCase, private val getRecentlyAddedItemsUseCase: GetRecentlyAddedItemsUseCase ) : ViewModel() { private val _uiState = MutableStateFlow<DashboardUiState>(DashboardUiState.Loading) val uiState = _uiState.asStateFlow() init { loadDashboardData() } // [ENTITY: Function('loadDashboardData')] /** @summary Загружает все необходимые данные для экрана Dashboard. @description Выполняет UseCase'ы параллельно и обновляет UI, переключая его между состояниями `Loading`, `Success` и `Error` из `DashboardUiState`. @sideeffect Асинхронно обновляет `_uiState` одним из состояний `DashboardUiState`. / fun loadDashboardData() { viewModelScope.launch { _uiState.value = DashboardUiState.Loading Timber.i("[INFO][ENTRYPOINT][loading_dashboard_data] Starting dashboard data collection.") val statsFlow = flow { emit(getStatisticsUseCase()) } val locationsFlow = flow { emit(getAllLocationsUseCase()) } val labelsFlow = flow { emit(getAllLabelsUseCase()) } val recentItemsFlow = getRecentlyAddedItemsUseCase(limit = 10) combine(statsFlow, locationsFlow, labelsFlow, recentItemsFlow) { stats, locations, labels, recentItems -> DashboardUiState.Success( statistics = stats, locations = locations, labels = labels, recentlyAddedItems = recentItems ) }.catch { exception -> Timber.e(exception, "[ERROR][EXCEPTION][loading_failed] Failed to load dashboard data. State -> Error.") _uiState.value = DashboardUiState.Error( message = exception.message ?: "Could not load dashboard data." ) }.collect { successState -> Timber.i("[INFO][SUCCESS][dashboard_data_loaded] Dashboard data loaded successfully. State -> Success.") _uiState.value = successState } } } // [END_ENTITY: Function('loadDashboardData')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui_logic, dashboard, state_management, sealed_state, parallel_data_loading, timber_logging</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="GetStatisticsUseCase" />
|
||
<RELATION type="DEPENDS_ON" target_id="GetAllLocationsUseCase" />
|
||
<RELATION type="DEPENDS_ON" target_id="GetAllLabelsUseCase" />
|
||
<RELATION type="DEPENDS_ON" target_id="GetRecentlyAddedItemsUseCase" />
|
||
<RELATION type="EMITS_STATE" target_id="DashboardUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_labeleditscreen" type="Function" name="LabelEditScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labeledit/LabelEditScreen.kt" package="com.homebox.lens.ui.screen.labeledit">
|
||
<SUMMARY>Composable-функция для экрана "Редактирование метки".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, label, edit</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="view_model_labeleditviewmodel" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="view_model_labeleditviewmodel" type="ViewModel" name="LabelEditViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labeledit/LabelEditViewModel.kt" package="com.homebox.lens.ui.screen.labeledit">
|
||
<SUMMARY>ViewModel для экрана редактирования/создания метки.</SUMMARY>
|
||
<DESCRIPTION>Управляет состоянием и логикой экрана, включая загрузку, создание и обновление метки.</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui, viewmodel, label_management, hilt</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="GetLabelDetailsUseCase" />
|
||
<RELATION type="DEPENDS_ON" target_id="use_case_createlabelusecase" />
|
||
<RELATION type="DEPENDS_ON" target_id="use_case_updatelabelusecase" />
|
||
<RELATION type="EMITS_STATE" target_id="data_class_labeledituistate" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_labeledituistate" type="DataClass" name="LabelEditUiState" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labeledit/LabelEditViewModel.kt" package="com.homebox.lens.ui.screen.labeledit">
|
||
<SUMMARY>Состояние UI для экрана редактирования метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, viewmodel, label_management</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_inventorylistscreen" type="Function" name="InventoryListScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListScreen.kt" package="com.homebox.lens.ui.screen.inventorylist">
|
||
<SUMMARY>Composable-функция для экрана "Список инвентаря".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, inventory, list</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
<RELATION type="CALLS" target_id="MainScaffold" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="view_model_inventorylistviewmodel" type="ViewModel" name="InventoryListViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListViewModel.kt" package="com.homebox.lens.ui.screen.inventorylist">
|
||
<SUMMARY>ViewModel for the inventory list screen.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, viewmodel, inventory_list</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_setupuistate" type="DataClass" name="SetupUiState" file_path="./app/src/main/java/com/homebox/lens/ui/screen/setup/SetupUiState.kt" package="com.homebox.lens.ui.screen.setup">
|
||
<SUMMARY>Неизменяемая модель данных, представляющая полное состояние экрана настройки (Setup Screen).</SUMMARY>
|
||
<DESCRIPTION>Использование `data class` предоставляет метод `copy()` для легкого создания новых состояний. @param serverUrl URL-адрес сервера Homebox. @param username Имя пользователя для входа. @param password Пароль пользователя. @param isLoading Флаг, указывающий, выполняется ли в данный момент сетевой запрос. @param error Сообщение об ошибке для отображения пользователю, или `null` при отсутствии ошибки. @param isSetupComplete Флаг, указывающий на успешное завершение настройки и входа. / data class SetupUiState( val serverUrl: String = "", val username: String = "", val password: String = "", val isLoading: Boolean = false, val error: String? = null, val isSetupComplete: Boolean = false )</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui_state, data_model, immutable</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_setupscreen" type="Function" name="SetupScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/setup/SetupScreen.kt" package="com.homebox.lens.ui.screen.setup">
|
||
<SUMMARY>Главная Composable-функция для экрана настройки соединения с сервером.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, setup, compose</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="SetupViewModel" />
|
||
<RELATION type="CALLS" target_id="SetupScreenContent" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_setupscreencontent" type="Function" name="SetupScreenContent" file_path="./app/src/main/java/com/homebox/lens/ui/screen/setup/SetupScreen.kt" package="com.homebox.lens.ui.screen.setup">
|
||
<SUMMARY>Отображает контент экрана настройки: поля ввода и кнопку.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, setup, compose</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="CONSUMES_STATE" target_id="SetupUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_setupscreenpreview" type="Function" name="SetupScreenPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/setup/SetupScreen.kt" package="com.homebox.lens.ui.screen.setup">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, setup, compose</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="view_model_setupviewmodel" type="ViewModel" name="SetupViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/setup/SetupViewModel.kt" package="com.homebox.lens.ui.screen.setup">
|
||
<SUMMARY>ViewModel для экрана первоначальной настройки (Setup).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui_logic, viewmodel, state_management, user_setup, authentication_flow</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="CredentialsRepository" />
|
||
<RELATION type="DEPENDS_ON" target_id="LoginUseCase" />
|
||
<RELATION type="EMITS_STATE" target_id="SetupUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_labelslistscreen" type="Function" name="LabelsListScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" package="com.homebox.lens.ui.screen.labelslist">
|
||
<SUMMARY>Отображает экран со списком всех меток.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, labels_list, state_management, compose, dialog</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LabelsListViewModel" />
|
||
<RELATION type="DEPENDS_ON" target_id="NavController" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_labelslist" type="Function" name="LabelsList" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" package="com.homebox.lens.ui.screen.labelslist">
|
||
<SUMMARY>Composable-функция для отображения списка меток.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, labels_list, state_management, compose, dialog</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="Label" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_labellistitem" type="Function" name="LabelListItem" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" package="com.homebox.lens.ui.screen.labelslist">
|
||
<SUMMARY>Composable-функция для отображения одного элемента в списке меток.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, labels_list, state_management, compose, dialog</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="Label" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="view_model_labelslistviewmodel" type="ViewModel" name="LabelsListViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListViewModel.kt" package="com.homebox.lens.ui.screen.labelslist">
|
||
<SUMMARY>ViewModel для экрана со списком меток.</SUMMARY>
|
||
<DESCRIPTION>Управляет состоянием экрана, загружает список меток, обрабатывает ошибки и управляет диалогом создания новой метки. @invariant `uiState` всегда является одним из состояний, определенных в `LabelsListUiState`. / @HiltViewModel class LabelsListViewModel @Inject constructor( private val getAllLabelsUseCase: GetAllLabelsUseCase ) : ViewModel() { private val _uiState = MutableStateFlow<LabelsListUiState>(LabelsListUiState.Loading) val uiState = _uiState.asStateFlow() init { loadLabels() } // [ENTITY: Function('loadLabels')] /** @summary Загружает список меток. @description Выполняет `GetAllLabelsUseCase` и обновляет UI, переключая его между состояниями `Loading`, `Success` и `Error`. @sideeffect Асинхронно обновляет `_uiState`. / fun loadLabels() { viewModelScope.launch { _uiState.value = LabelsListUiState.Loading Timber.i("[INFO][ENTRYPOINT][loading_labels] Starting labels list load. State -> Loading.") val result = runCatching { getAllLabelsUseCase() } result.fold( onSuccess = { labelOuts -> Timber.i("[INFO][SUCCESS][labels_loaded] Labels loaded successfully. Count: ${labelOuts.size}. State -> Success.") val labels = labelOuts.map { labelOut -> Label( id = labelOut.id, name = labelOut.name ) } _uiState.value = LabelsListUiState.Success(labels, isShowingCreateDialog = false) }, onFailure = { exception -> Timber.e(exception, "[ERROR][EXCEPTION][loading_failed] Failed to load labels. State -> Error.") _uiState.value = LabelsListUiState.Error( message = exception.message ?: "Could not load labels." ) } ) } } // [END_ENTITY: Function('loadLabels')] // [ENTITY: Function('onShowCreateDialog')] /** @summary Инициирует отображение диалога для создания метки. @description Обновляет состояние `uiState`, устанавливая `isShowingCreateDialog` в `true`. @sideeffect Обновляет `_uiState`. / fun onShowCreateDialog() { Timber.i("[INFO][ACTION][show_create_dialog] Show create label dialog requested.") if (_uiState.value is LabelsListUiState.Success) { _uiState.update { (it as LabelsListUiState.Success).copy(isShowingCreateDialog = true) } } } // [END_ENTITY: Function('onShowCreateDialog')] // [ENTITY: Function('onDismissCreateDialog')] /** @summary Скрывает диалог создания метки. @description Обновляет состояние `uiState`, устанавливая `isShowingCreateDialog` в `false`. @sideeffect Обновляет `_uiState`. / fun onDismissCreateDialog() { Timber.i("[INFO][ACTION][dismiss_create_dialog] Dismiss create label dialog requested.") if (_uiState.value is LabelsListUiState.Success) { _uiState.update { (it as LabelsListUiState.Success).copy(isShowingCreateDialog = false) } } } // [END_ENTITY: Function('onDismissCreateDialog')] // [ENTITY: Function('createLabel')] /** @summary Создает новую метку. [MVP_SCOPE] ЗАГЛУШКА. @description В текущей реализации (План Б, Этап 1), эта функция только логирует действие и скрывает диалог. Реальная логика сохранения будет добавлена на следующем этапе. @param name Название новой метки. @precondition `name` не должен быть пустым. @sideeffect Логирует действие, обновляет `_uiState`, чтобы скрыть диалог. / fun createLabel(name: String) { require(name.isNotBlank()) { "[CONTRACT_VIOLATION] Label name cannot be blank." } Timber.i("[INFO][ACTION][create_label] Create label called with name: '$name'. [STUBBED]") // [AI_NOTE]: Здесь будет вызов CreateLabelUseCase. onDismissCreateDialog() } // [END_ENTITY: Function('createLabel')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui_logic, labels_list, state_management, dialog_management</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="GetAllLabelsUseCase" />
|
||
<RELATION type="EMITS_STATE" target_id="LabelsListUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="sealed_interface_labelslistuistate" type="SealedInterface" name="LabelsListUiState" file_path="./app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListUiState.kt" package="com.homebox.lens.ui.screen.labelslist">
|
||
<SUMMARY>Определяет все возможные состояния для UI экрана со списком меток.</SUMMARY>
|
||
<DESCRIPTION>Использование sealed-интерфейса позволяет исчерпывающе обрабатывать все состояния в Composable-функциях. / sealed interface LabelsListUiState { // [ENTITY: DataClass('Success')] // [RELATION: DataClass('Success')] -> [DEPENDS_ON] -> [DataClass('Label')] /** @summary Состояние успеха, содержит список меток и состояние диалога. @param labels Список меток для отображения. @param isShowingCreateDialog Флаг, показывающий, должен ли быть отображен диалог создания метки. @invariant labels не может быть null. / data class Success( val labels: List<Label>, val isShowingCreateDialog: Boolean = false ) : LabelsListUiState // [END_ENTITY: DataClass('Success')] // [ENTITY: DataClass('Error')] /** @summary Состояние ошибки. @param message Текст ошибки для отображения пользователю. @invariant message не может быть пустой. / data class Error(val message: String) : LabelsListUiState // [END_ENTITY: DataClass('Error')] // [ENTITY: Object('Loading')] /** @summary Состояние загрузки данных. @description Указывает, что идет процесс загрузки меток. / data object Loading : LabelsListUiState // [END_ENTITY: Object('Loading')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui_state, sealed_interface, contract</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="Label" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="screen_scan" type="Screen" name="ScanScreen" file_path="./feature/scan/src/main/java/com/homebox/lens/feature/scan/ScanScreen.kt" package="com.homebox.lens.feature.scan">
|
||
<SUMMARY>Экран для сканирования QR-кодов и штрих-кодов.</SUMMARY>
|
||
<SEMANTICS_TAGS>ui, screen, scan, camera, qrcode, barcode</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="view_model_scanviewmodel" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="view_model_scanviewmodel" type="ViewModel" name="ScanViewModel" file_path="./feature/scan/src/main/java/com/homebox/lens/feature/scan/ScanViewModel.kt" package="com.homebox.lens.feature.scan">
|
||
<SUMMARY>ViewModel для экрана сканирования.</SUMMARY>
|
||
<SEMANTICS_TAGS>ui_logic, viewmodel, scan, camera</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="EMITS_STATE" target_id="sealed_interface_scanuistate" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="sealed_interface_scanuistate" type="SealedInterface" name="ScanUiState" file_path="./feature/scan/src/main/java/com/homebox/lens/feature/scan/ScanUiState.kt" package="com.homebox.lens.feature.scan">
|
||
<SUMMARY>Определяет все возможные состояния для UI экрана сканирования.</SUMMARY>
|
||
<SEMANTICS_TAGS>ui_state, sealed_interface, contract</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="class_barcodeanalyzer" type="Class" name="BarcodeAnalyzer" file_path="./feature/scan/src/main/java/com/homebox/lens/feature/scan/BarcodeAnalyzer.kt" package="com.homebox.lens.feature.scan">
|
||
<SUMMARY>Анализатор изображений для обнаружения штрих-кодов.</SUMMARY>
|
||
<SEMANTICS_TAGS>data, service, barcode_scanning</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_itemeditscreen" type="Function" name="ItemEditScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditScreen.kt" package="com.homebox.lens.ui.screen.itemedit">
|
||
<SUMMARY>Composable-функция для экрана "Редактирование элемента".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, item, edit</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
<RELATION type="DEPENDS_ON" target_id="ItemEditViewModel" />
|
||
<RELATION type="CONSUMES_STATE" target_id="ItemEditUiState" />
|
||
<RELATION type="CALLS" target_id="MainScaffold" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_itemedituistate" type="DataClass" name="ItemEditUiState" file_path="./app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditViewModel.kt" package="com.homebox.lens.ui.screen.itemedit">
|
||
<SUMMARY>UI state for the item edit screen.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, viewmodel, item_edit</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="view_model_itemeditviewmodel" type="ViewModel" name="ItemEditViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditViewModel.kt" package="com.homebox.lens.ui.screen.itemedit">
|
||
<SUMMARY>ViewModel for the item edit screen.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, viewmodel, item_edit</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="CreateItemUseCase" />
|
||
<RELATION type="DEPENDS_ON" target_id="UpdateItemUseCase" />
|
||
<RELATION type="DEPENDS_ON" target_id="GetItemDetailsUseCase" />
|
||
<RELATION type="EMITS_STATE" target_id="ItemEditUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_searchscreen" type="Function" name="SearchScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/search/SearchScreen.kt" package="com.homebox.lens.ui.screen.search">
|
||
<SUMMARY>Composable-функция для экрана "Поиск".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, search</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
<RELATION type="CALLS" target_id="MainScaffold" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="view_model_searchviewmodel" type="ViewModel" name="SearchViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/search/SearchViewModel.kt" package="com.homebox.lens.ui.screen.search">
|
||
<SUMMARY>ViewModel for the search screen.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, viewmodel, search</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_locationeditscreen" type="Function" name="LocationEditScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationedit/LocationEditScreen.kt" package="com.homebox.lens.ui.screen.locationedit">
|
||
<SUMMARY>Composable-функция для экрана "Редактирование местоположения".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, location, edit</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="view_model_itemdetailsviewmodel" type="ViewModel" name="ItemDetailsViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsViewModel.kt" package="com.homebox.lens.ui.screen.itemdetails">
|
||
<SUMMARY>ViewModel for the item details screen.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, viewmodel, item_details</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_itemdetailsscreen" type="Function" name="ItemDetailsScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsScreen.kt" package="com.homebox.lens.ui.screen.itemdetails">
|
||
<SUMMARY>Composable-функция для экрана "Детали элемента".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, item, details</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
<RELATION type="CALLS" target_id="MainScaffold" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_locationslistscreen" type="Function" name="LocationsListScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY>Composable-функция для экрана "Список местоположений".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, locations, list</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LocationsListViewModel" />
|
||
<RELATION type="DEPENDS_ON" target_id="NavigationActions" />
|
||
<RELATION type="CALLS" target_id="MainScaffold" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_locationslistcontent" type="Function" name="LocationsListContent" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY>Отображает основной контент экрана в зависимости от `uiState`.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, locations, list</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="CONSUMES_STATE" target_id="LocationsListUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_locationcard" type="Function" name="LocationCard" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY>Карточка для отображения одного местоположения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, locations, list</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LocationOutCount" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_locationslistsuccesspreview" type="Function" name="LocationsListSuccessPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, locations, list</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_locationslistemptypreview" type="Function" name="LocationsListEmptyPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, locations, list</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_locationslistloadingpreview" type="Function" name="LocationsListLoadingPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, locations, list</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_locationslisterrorpreview" type="Function" name="LocationsListErrorPreview" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, screen, locations, list</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="view_model_locationslistviewmodel" type="ViewModel" name="LocationsListViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListViewModel.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY>ViewModel для экрана списка местоположений.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, viewmodel, locations, hilt</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="GetAllLocationsUseCase" />
|
||
<RELATION type="EMITS_STATE" target_id="LocationsListUiState" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="sealed_interface_locationslistuistate" type="SealedInterface" name="LocationsListUiState" file_path="./app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListUiState.kt" package="com.homebox.lens.ui.screen.locationslist">
|
||
<SUMMARY>Определяет возможные состояния UI для экрана списка местоположений.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, state, locations</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LocationOutCount" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_colorpicker" type="Function" name="ColorPicker" file_path="./app/src/main/java/com/homebox/lens/ui/components/ColorPicker.kt" package="com.homebox.lens.ui.components">
|
||
<SUMMARY>Компонент для выбора цвета.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, component, color_selection</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_loadingoverlay" type="Function" name="LoadingOverlay" file_path="./app/src/main/java/com/homebox/lens/ui/components/LoadingOverlay.kt" package="com.homebox.lens.ui.components">
|
||
<SUMMARY>Полноэкранный оверлей с индикатором загрузки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, component, loading</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="activity_mainactivity" type="Activity" name="MainActivity" file_path="./app/src/main/java/com/homebox/lens/MainActivity.kt" package="com.homebox.lens">
|
||
<SUMMARY>Главная и единственная Activity в приложении.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, activity, entrypoint</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="CALLS" target_id="HomeboxLensTheme" />
|
||
<RELATION type="CALLS" target_id="NavGraph" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_greeting" type="Function" name="Greeting" file_path="./app/src/main/java/com/homebox/lens/MainActivity.kt" package="com.homebox.lens">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, activity, entrypoint</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_greetingpreview" type="Function" name="GreetingPreview" file_path="./app/src/main/java/com/homebox/lens/MainActivity.kt" package="com.homebox.lens">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>ui, activity, entrypoint</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="class_updateitemusecasetest" type="Class" name="UpdateItemUseCaseTest" file_path="./domain/src/test/java/com/homebox/lens/domain/usecase/UpdateItemUseCaseTest.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Unit tests for [UpdateItemUseCase].</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>testing, usecase, unit_test</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="TESTS" target_id="UpdateItemUseCase" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_updatelabelusecase" type="UseCase" name="UpdateLabelUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/UpdateLabelUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Сценарий использования для обновления метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, label, update</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_updatelocationusecase" type="UseCase" name="UpdateLocationUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/UpdateLocationUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Сценарий использования для обновления местоположения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, location, update</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_deleteitemusecase" type="UseCase" name="DeleteItemUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/DeleteItemUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Use case для удаления вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, item_deletion</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_getalllocationsusecase" type="UseCase" name="GetAllLocationsUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLocationsUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Получает список всех локаций.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, usecase</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
<RELATION type="RETURNS" target_id="List<LocationOutCount>" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_getrecentlyaddeditemsusecase" type="UseCase" name="GetRecentlyAddedItemsUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/GetRecentlyAddedItemsUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Сценарий использования для получения списка недавно добавленных товаров.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, usecase</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
<RELATION type="RETURNS" target_id="Flow<List<ItemSummary>>" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_getitemdetailsusecase" type="UseCase" name="GetItemDetailsUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/GetItemDetailsUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Use case для получения детальной информации о вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, item_retrieval</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_getstatisticsusecase" type="UseCase" name="GetStatisticsUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/GetStatisticsUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Получает статистику инвентаря.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, usecase</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
<RELATION type="RETURNS" target_id="GroupStatistics" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_loginusecase" type="UseCase" name="LoginUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/LoginUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Use case для выполнения входа пользователя.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, usecase, authentication</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="AuthRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_createitemusecase" type="UseCase" name="CreateItemUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/CreateItemUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Use case для создания новой вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, item_creation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_syncinventoryusecase" type="UseCase" name="SyncInventoryUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/SyncInventoryUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Use case для синхронизации (получения) списка вещей.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, data_sync</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_searchitemsusecase" type="UseCase" name="SearchItemsUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/SearchItemsUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Use case для поиска вещей по текстовому запросу.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, search</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_createlocationusecase" type="UseCase" name="CreateLocationUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/CreateLocationUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Сценарий использования для создания нового местоположения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, location, create</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_deletelocationusecase" type="UseCase" name="DeleteLocationUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/DeleteLocationUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Сценарий использования для удаления местоположения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, location, delete</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_deletelabelusecase" type="UseCase" name="DeleteLabelUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/DeleteLabelUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Сценарий использования для удаления метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, label, delete</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_getlabeldetailsusecase" type="UseCase" name="GetLabelDetailsUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/GetLabelDetailsUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Получает детальную информацию о метке по ее ID.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, label_retrieval</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_updateitemusecase" type="UseCase" name="UpdateItemUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/UpdateItemUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Use case для обновления существующей вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, item_management</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
<RELATION type="CALLS" target_id="ItemRepository.updateItem" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_createlabelusecase" type="UseCase" name="CreateLabelUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/CreateLabelUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Сценарий использования для создания новой метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>business_logic, use_case, label, create</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="use_case_getalllabelsusecase" type="UseCase" name="GetAllLabelsUseCase" file_path="./domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLabelsUseCase.kt" package="com.homebox.lens.domain.usecase">
|
||
<SUMMARY>Получает список всех меток.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, usecase</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemRepository" />
|
||
<RELATION type="RETURNS" target_id="List<LabelOut>" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_labelcreate" type="DataClass" name="LabelCreate" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LabelCreate.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель с данными, необходимыми для создания новой метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, contract, label, create</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_groupstatistics" type="DataClass" name="GroupStatistics" file_path="./domain/src/main/java/com/homebox/lens/domain/model/GroupStatistics.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для представления агрегированной статистики.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, statistics</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemcreate" type="DataClass" name="ItemCreate" file_path="./domain/src/main/java/com/homebox/lens/domain/model/ItemCreate.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для создания новой "Вещи".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, input, create</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_label" type="DataClass" name="Label" file_path="./domain/src/main/java/com/homebox/lens/domain/model/Label.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Представляет собой метку (тег), которую можно присвоить вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, model</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_locationupdate" type="DataClass" name="LocationUpdate" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LocationUpdate.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель с данными, необходимыми для обновления местоположения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, contract, location, update</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_tokenresponse" type="DataClass" name="TokenResponse" file_path="./domain/src/main/java/com/homebox/lens/domain/model/TokenResponse.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных, представляющая ответ от сервера с токеном аутентификации.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, authentication, model</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="sealed_class_result" type="SealedClass" name="Result" file_path="./domain/src/main/java/com/homebox/lens/domain/model/Result.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Представляет собой результат операции, который может быть либо успешным, либо неуспешным.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, model, result</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_customfield" type="DataClass" name="CustomField" file_path="./domain/src/main/java/com/homebox/lens/domain/model/CustomField.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для представления кастомного поля.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, custom_field</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_labelsummary" type="DataClass" name="LabelSummary" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LabelSummary.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Представляет краткую информацию о метке, обычно возвращаемую после создания.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, label, summary</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_locationout" type="DataClass" name="LocationOut" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LocationOut.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для представления местоположения (без счетчика).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, location</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_labelupdate" type="DataClass" name="LabelUpdate" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LabelUpdate.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель с данными, необходимыми для обновления метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, contract, label, update</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_image" type="DataClass" name="Image" file_path="./domain/src/main/java/com/homebox/lens/domain/model/Image.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для представления изображения, привязанного к вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, image</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_locationcreate" type="DataClass" name="LocationCreate" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LocationCreate.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель с данными, необходимыми для создания нового местоположения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, contract, location, create</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_credentials" type="DataClass" name="Credentials" file_path="./domain/src/main/java/com/homebox/lens/domain/model/Credentials.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Data class to hold server credentials.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, model, credentials</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemout" type="DataClass" name="ItemOut" file_path="./domain/src/main/java/com/homebox/lens/domain/model/ItemOut.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Полная модель данных для представления "Вещи" со всеми полями.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, detailed</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemupdate" type="DataClass" name="ItemUpdate" file_path="./domain/src/main/java/com/homebox/lens/domain/model/ItemUpdate.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для обновления существующей "Вещи".</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, input, update</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_labelout" type="DataClass" name="LabelOut" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LabelOut.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для представления метки (тега).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, label</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemattachment" type="DataClass" name="ItemAttachment" file_path="./domain/src/main/java/com/homebox/lens/domain/model/ItemAttachment.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для представления вложения (файла), привязанного к вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, attachment</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemsummary" type="DataClass" name="ItemSummary" file_path="./domain/src/main/java/com/homebox/lens/domain/model/ItemSummary.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Сокращенная модель данных для представления "Вещи" в списках.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, summary</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_statistics" type="DataClass" name="Statistics" file_path="./domain/src/main/java/com/homebox/lens/domain/model/Statistics.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Представляет собой статистику по инвентарю.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, model</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_locationoutcount" type="DataClass" name="LocationOutCount" file_path="./domain/src/main/java/com/homebox/lens/domain/model/LocationOutCount.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для представления местоположения со счетчиком вещей.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, location</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_location" type="DataClass" name="Location" file_path="./domain/src/main/java/com/homebox/lens/domain/model/Location.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Представляет собой местоположение, где может находиться вещь.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, model</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_paginationresult" type="DataClass" name="PaginationResult" file_path="./domain/src/main/java/com/homebox/lens/domain/model/PaginationResult.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Генерик-класс для представления постраничных результатов от API.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, generic, pagination</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_maintenanceentry" type="DataClass" name="MaintenanceEntry" file_path="./domain/src/main/java/com/homebox/lens/domain/model/MaintenanceEntry.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Модель данных для записи о техническом обслуживании.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_structure, entity, maintenance</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_item" type="DataClass" name="Item" file_path="./domain/src/main/java/com/homebox/lens/domain/model/Item.kt" package="com.homebox.lens.domain.model">
|
||
<SUMMARY>Представляет собой вещь в инвентаре.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, model</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="Location" />
|
||
<RELATION type="DEPENDS_ON" target_id="Label" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="interface_authrepository" type="Interface" name="AuthRepository" file_path="./domain/src/main/java/com/homebox/lens/domain/repository/AuthRepository.kt" package="com.homebox.lens.domain.repository">
|
||
<SUMMARY>Репозиторий для управления аутентификацией.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>authentication, data_access, repository</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="interface_itemrepository" type="Interface" name="ItemRepository" file_path="./domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt" package="com.homebox.lens.domain.repository">
|
||
<SUMMARY>Абстракция репозитория для работы с "Вещами".</SUMMARY>
|
||
<DESCRIPTION>Определяет контракт, которому должен следовать слой данных. / interface ItemRepository { // [ENTITY: Function('createItem')] // [RELATION: Function('createItem')] -> [RETURNS] -> [DataClass('ItemSummary')] /** @summary Создает новый элемент. @param newItemData Данные для создания нового элемента. @return Сводка по созданному элементу. / suspend fun createItem(newItemData: ItemCreate): ItemSummary // [END_ENTITY: Function('createItem')] // [ENTITY: Function('getItemDetails')] // [RELATION: Function('getItemDetails')] -> [RETURNS] -> [DataClass('ItemOut')] /** @summary Получает детальную информацию об элементе. @param itemId ID элемента. @return Детальная информация об элементе. / suspend fun getItemDetails(itemId: String): ItemOut // [END_ENTITY: Function('getItemDetails')] // [ENTITY: Function('updateItem')] // [RELATION: Function('updateItem')] -> [RETURNS] -> [DataClass('ItemOut')] /** @summary Обновляет элемент. @param itemId ID элемента для обновления. @param item Данные для обновления элемента. @return Обновленная детальная информация об элементе. / suspend fun updateItem(itemId: String, item: ItemUpdate): ItemOut // [END_ENTITY: Function('updateItem')] // [ENTITY: Function('deleteItem')] /** @summary Удаляет элемент. @param itemId ID элемента для удаления. / suspend fun deleteItem(itemId: String) // [END_ENTITY: Function('deleteItem')] // [ENTITY: Function('syncInventory')] // [RELATION: Function('syncInventory')] -> [RETURNS] -> [DataClass('PaginationResult<ItemSummary>')] /** @summary Синхронизирует инвентарь. @param page Номер страницы. @param pageSize Размер страницы. @return Результат пагинации со сводкой по элементам. / suspend fun syncInventory(page: Int, pageSize: Int): PaginationResult<ItemSummary> // [END_ENTITY: Function('syncInventory')] // [ENTITY: Function('getStatistics')] // [RELATION: Function('getStatistics')] -> [RETURNS] -> [DataClass('GroupStatistics')] /** @summary Получает статистику. @return Статистика по группам. / suspend fun getStatistics(): GroupStatistics // [END_ENTITY: Function('getStatistics')] // [ENTITY: Function('getAllLocations')] // [RELATION: Function('getAllLocations')] -> [RETURNS] -> [DataStructure('List<LocationOutCount>')] /** @summary Получает все местоположения. @return Список всех местоположений со счетчиками. / suspend fun getAllLocations(): List<LocationOutCount> // [END_ENTITY: Function('getAllLocations')] // [ENTITY: Function('getAllLabels')] // [RELATION: Function('getAllLabels')] -> [RETURNS] -> [DataStructure('List<LabelOut>')] /** @summary Получает все метки. @return Список всех меток. / suspend fun getAllLabels(): List<LabelOut> // [END_ENTITY: Function('getAllLabels')] // [ENTITY: Function('getLabelDetails')] // [RELATION: Function('getLabelDetails')] -> [RETURNS] -> [DataClass('LabelOut')] /** @summary Получает детальную информацию о метке. @param labelId ID метки. @return Детальная информация о метке. / suspend fun getLabelDetails(labelId: String): LabelOut // [END_ENTITY: Function('getLabelDetails')] // [ENTITY: Function('createLabel')] // [RELATION: Function('createLabel')] -> [RETURNS] -> [DataClass('LabelSummary')] /** @summary Создает новую метку. @param newLabelData Данные для создания новой метки. @return Сводка по созданной метке. / suspend fun createLabel(newLabelData: LabelCreate): LabelSummary // [END_ENTITY: Function('createLabel')] // [ENTITY: Function('updateLabel')] // [RELATION: Function('updateLabel')] -> [RETURNS] -> [DataClass('LabelOut')] /** @summary Обновляет метку. @param labelId ID метки для обновления. @param labelData Данные для обновления метки. @return Обновленная информация о метке. / suspend fun updateLabel(labelId: String, labelData: LabelUpdate): LabelOut // [END_ENTITY: Function('updateLabel')] // [ENTITY: Function('deleteLabel')] /** @summary Удаляет метку. @param labelId ID метки для удаления. / suspend fun deleteLabel(labelId: String) // [END_ENTITY: Function('deleteLabel')] // [ENTITY: Function('createLocation')] // [RELATION: Function('createLocation')] -> [RETURNS] -> [DataClass('LocationOut')] /** @summary Создает новое местоположение. @param newLocationData Данные для создания нового местоположения. @return Информация о созданном местоположении. / suspend fun createLocation(newLocationData: LocationCreate): LocationOut // [END_ENTITY: Function('createLocation')] // [ENTITY: Function('updateLocation')] // [RELATION: Function('updateLocation')] -> [RETURNS] -> [DataClass('LocationOut')] /** @summary Обновляет местоположение. @param locationId ID местоположения для обновления. @param locationData Данные для обновления местоположения. @return Обновленная информация о местоположении. / suspend fun updateLocation(locationId: String, locationData: LocationUpdate): LocationOut // [END_ENTITY: Function('updateLocation')] // [ENTITY: Function('deleteLocation')] /** @summary Удаляет местоположение. @param locationId ID местоположения для удаления. / suspend fun deleteLocation(locationId: String) // [END_ENTITY: Function('deleteLocation')] // [ENTITY: Function('searchItems')] // [RELATION: Function('searchItems')] -> [RETURNS] -> [DataClass('PaginationResult<ItemSummary>')] /** @summary Ищет элементы. @param query Поисковый запрос. @return Результат пагинации со сводкой по найденным элементам. / suspend fun searchItems(query: String): PaginationResult<ItemSummary> // [END_ENTITY: Function('searchItems')] // [ENTITY: Function('getRecentlyAddedItems')] // [RELATION: Function('getRecentlyAddedItems')] -> [RETURNS] -> [DataStructure('Flow<List<ItemSummary>>')] /** @summary Получает недавно добавленные элементы. @param limit Максимальное количество возвращаемых элементов. @return Поток со списком недавно добавленных элементов. / fun getRecentlyAddedItems(limit: Int): Flow<List<ItemSummary>> // [END_ENTITY: Function('getRecentlyAddedItems')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>data_access, abstraction, repository</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="ItemSummary" />
|
||
<RELATION type="RETURNS" target_id="ItemOut" />
|
||
<RELATION type="RETURNS" target_id="ItemOut" />
|
||
<RELATION type="RETURNS" target_id="PaginationResult<ItemSummary>" />
|
||
<RELATION type="RETURNS" target_id="GroupStatistics" />
|
||
<RELATION type="RETURNS" target_id="List<LocationOutCount>" />
|
||
<RELATION type="RETURNS" target_id="List<LabelOut>" />
|
||
<RELATION type="RETURNS" target_id="LabelOut" />
|
||
<RELATION type="RETURNS" target_id="LabelSummary" />
|
||
<RELATION type="RETURNS" target_id="LabelOut" />
|
||
<RELATION type="RETURNS" target_id="LocationOut" />
|
||
<RELATION type="RETURNS" target_id="LocationOut" />
|
||
<RELATION type="RETURNS" target_id="PaginationResult<ItemSummary>" />
|
||
<RELATION type="RETURNS" target_id="Flow<List<ItemSummary>>" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="interface_credentialsrepository" type="Interface" name="CredentialsRepository" file_path="./domain/src/main/java/com/homebox/lens/domain/repository/CredentialsRepository.kt" package="com.homebox.lens.domain.repository">
|
||
<SUMMARY>Repository for managing user credentials and session tokens.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>domain, repository, credentials</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="module_repositorymodule" type="Module" name="RepositoryModule" file_path="./data/src/main/java/com/homebox/lens/data/di/RepositoryModule.kt" package="com.homebox.lens.data.di">
|
||
<SUMMARY>Hilt-модуль для предоставления реализаций репозиториев.</SUMMARY>
|
||
<DESCRIPTION>Использует `@Binds` для эффективного связывания интерфейсов с их реализациями. / @Module @InstallIn(SingletonComponent::class) abstract class RepositoryModule { // [ENTITY: Function('bindItemRepository')] // [RELATION: Function('bindItemRepository')] -> [PROVIDES] -> [Interface('ItemRepository')] /** @summary Связывает интерфейс ItemRepository с его реализацией. / @Binds @Singleton abstract fun bindItemRepository( itemRepositoryImpl: ItemRepositoryImpl ): ItemRepository // [END_ENTITY: Function('bindItemRepository')] // [ENTITY: Function('bindCredentialsRepository')] // [RELATION: Function('bindCredentialsRepository')] -> [PROVIDES] -> [Interface('CredentialsRepository')] /** @summary Связывает интерфейс CredentialsRepository с его реализацией. / @Binds @Singleton abstract fun bindCredentialsRepository( credentialsRepositoryImpl: CredentialsRepositoryImpl ): CredentialsRepository // [END_ENTITY: Function('bindCredentialsRepository')] // [ENTITY: Function('bindAuthRepository')] // [RELATION: Function('bindAuthRepository')] -> [PROVIDES] -> [Interface('AuthRepository')] /** @summary Связывает интерфейс AuthRepository с его реализацией. / @Binds @Singleton abstract fun bindAuthRepository( authRepositoryImpl: AuthRepositoryImpl ): AuthRepository // [END_ENTITY: Function('bindAuthRepository')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>dependency_injection, hilt, module, binding</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="PROVIDES" target_id="ItemRepository" />
|
||
<RELATION type="PROVIDES" target_id="CredentialsRepository" />
|
||
<RELATION type="PROVIDES" target_id="AuthRepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="module_apimodule" type="Module" name="ApiModule" file_path="./data/src/main/java/com/homebox/lens/data/di/ApiModule.kt" package="com.homebox.lens.data.di">
|
||
<SUMMARY>Hilt-модуль, отвечающий за создание и предоставление всех зависимостей,</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>di, networking</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="PROVIDES" target_id="OkHttpClient" />
|
||
<RELATION type="PROVIDES" target_id="Moshi" />
|
||
<RELATION type="PROVIDES" target_id="MoshiConverterFactory" />
|
||
<RELATION type="PROVIDES" target_id="Retrofit" />
|
||
<RELATION type="PROVIDES" target_id="HomeboxApiService" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="module_storagemodule" type="Module" name="StorageModule" file_path="./data/src/main/java/com/homebox/lens/data/di/StorageModule.kt" package="com.homebox.lens.data.di">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>di, hilt, storage</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="PROVIDES" target_id="SharedPreferences" />
|
||
<RELATION type="PROVIDES" target_id="EncryptedPreferencesWrapper" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="module_databasemodule" type="Module" name="DatabaseModule" file_path="./data/src/main/java/com/homebox/lens/data/di/DatabaseModule.kt" package="com.homebox.lens.data.di">
|
||
<SUMMARY>Предоставляет зависимости для работы с базой данных Room.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>di, hilt, database</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="PROVIDES" target_id="HomeboxDatabase" />
|
||
<RELATION type="PROVIDES" target_id="ItemDao" />
|
||
<RELATION type="PROVIDES" target_id="LabelDao" />
|
||
<RELATION type="PROVIDES" target_id="LocationDao" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="interface_homeboxapiservice" type="Interface" name="HomeboxApiService" file_path="./data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt" package="com.homebox.lens.data.api">
|
||
<SUMMARY>Определяет эндпоинты для взаимодействия с Homebox API, используя DTO.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, api, retrofit</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemoutdto" type="DataClass" name="ItemOutDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemOutDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для полной модели вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_detailed</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemOutDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из ItemOutDto в доменную модель ItemOut.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_detailed</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="ItemOut" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_locationoutcountdto" type="DataClass" name="LocationOutCountDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationOutCountDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для местоположения со счетчиком.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, location, count</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationOutCountDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из LocationOutCountDto в доменную модель LocationOutCount.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, location, count</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LocationOutCount" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_itemcreatedto" type="DataClass" name="ItemCreateDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemCreateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для создания вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_creation</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todto" type="Function" name="toDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemCreateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из доменной модели ItemCreate в ItemCreateDto.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_creation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="ItemCreateDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_tokenresponsedto" type="DataClass" name="TokenResponseDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/TokenResponseDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api, token</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemout" type="DataClass" name="ItemOut" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для полной информации о вещи (GET /v1/items/{id}).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LocationOut" />
|
||
<RELATION type="DEPENDS_ON" target_id="LabelOutDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_itemsummary" type="DataClass" name="ItemSummary" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для краткой информации о вещи в списках (GET /v1/items).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="LocationOut" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_itemcreate" type="DataClass" name="ItemCreate" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для создания новой вещи (POST /v1/items).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemupdate" type="DataClass" name="ItemUpdate" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для обновления вещи (PUT /v1/items/{id}).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_locationoutdto" type="DataClass" name="LocationOutDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationOutDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, location, output</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationOutDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, location, output</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LocationOut" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_paginationresultdto" type="DataClass" name="PaginationResultDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/PaginationResultDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для постраничных результатов.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, pagination</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/PaginationResultDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из PaginationResultDto в доменную модель PaginationResult.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, pagination</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="PaginationResult" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_paginationresult" type="DataClass" name="PaginationResult" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/PaginationDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для пагинированных результатов от API.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api, pagination</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemupdatedto" type="DataClass" name="ItemUpdateDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemUpdateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для обновления вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_update</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todto" type="Function" name="toDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemUpdateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из доменной модели ItemUpdate в ItemUpdateDto.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_update</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="ItemUpdateDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_locationupdatedto" type="DataClass" name="LocationUpdateDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationUpdateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, location, update</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todto" type="Function" name="toDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationUpdateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, location, update</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LocationUpdateDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_imagedto" type="DataClass" name="ImageDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ImageDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для изображения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, image</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ImageDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из ImageDto в доменную модель Image.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, image</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="Image" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_customfielddto" type="DataClass" name="CustomFieldDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/CustomFieldDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для кастомного поля.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, custom_field</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/CustomFieldDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из CustomFieldDto в доменную модель CustomField.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, custom_field</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="CustomField" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_groupstatisticsdto" type="DataClass" name="GroupStatisticsDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/GroupStatisticsDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для статистики.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, statistics</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/GroupStatisticsDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из GroupStatisticsDto в доменную модель GroupStatistics.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, statistics</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="GroupStatistics" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_labelsummarydto" type="DataClass" name="LabelSummaryDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LabelSummaryDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для ответа от API при создании метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, label, summary, api, mapper</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LabelSummaryDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из DTO в доменную модель.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, label, summary, api, mapper</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LabelSummary" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_maintenanceentrydto" type="DataClass" name="MaintenanceEntryDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/MaintenanceEntryDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для записи об обслуживании.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, maintenance</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/MaintenanceEntryDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из MaintenanceEntryDto в доменную модель MaintenanceEntry.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, maintenance</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="MaintenanceEntry" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_locationcreatedto" type="DataClass" name="LocationCreateDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationCreateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, location, create</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_labeloutdto" type="DataClass" name="LabelOutDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LabelOutDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для метки.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, label</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LabelOutDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из LabelOutDto в доменную модель LabelOut.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, label</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LabelOut" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_groupstatistics" type="DataClass" name="GroupStatistics" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/StatisticsDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для статистической информации.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api, statistics</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_locationout" type="DataClass" name="LocationOut" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для информации о местоположении.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api, location</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_locationoutcount" type="DataClass" name="LocationOutCount" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LocationDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для информации о местоположении со счетчиком вещей.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api, location</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemattachmentdto" type="DataClass" name="ItemAttachmentDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemAttachmentDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для вложения.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, attachment</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemAttachmentDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из ItemAttachmentDto в доменную модель ItemAttachment.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, attachment</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="ItemAttachment" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_loginformdto" type="DataClass" name="LoginFormDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LoginFormDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, dto, api, login</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_labelcreatedto" type="DataClass" name="LabelCreateDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LabelCreateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для тела запроса на создание метки (POST /v1/labels).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, label, create, api</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="data_class_itemsummarydto" type="DataClass" name="ItemSummaryDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemSummaryDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>DTO для сокращенной модели вещи.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_summary</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/ItemSummaryDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY>Маппер из ItemSummaryDto в доменную модель ItemSummary.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, item_summary</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="ItemSummary" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_labelupdatedto" type="DataClass" name="LabelUpdateDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LabelUpdateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, label, update</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todto" type="Function" name="toDto" file_path="./data/src/main/java/com/homebox/lens/data/api/dto/LabelUpdateDto.kt" package="com.homebox.lens.data.api.dto">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_transfer_object, label, update</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LabelUpdateDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/api/mapper/TokenMapper.kt" package="com.homebox.lens.data.api.mapper">
|
||
<SUMMARY>Преобразует DTO-объект токена в доменную модель.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>mapper, data_conversion, clean_architecture</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="TokenResponse" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="database_homeboxdatabase" type="Database" name="HomeboxDatabase" file_path="./data/src/main/java/com/homebox/lens/data/db/HomeboxDatabase.kt" package="com.homebox.lens.data.db">
|
||
<SUMMARY>Основной класс для работы с локальной базой данных Room.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, room</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="database_table_labelentity" type="DatabaseTable" name="LabelEntity" file_path="./data/src/main/java/com/homebox/lens/data/db/entity/LabelEntity.kt" package="com.homebox.lens.data.db.entity">
|
||
<SUMMARY>Представляет собой строку в таблице 'labels' в локальной БД.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, entity, label</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="database_table_itemlabelcrossref" type="DatabaseTable" name="ItemLabelCrossRef" file_path="./data/src/main/java/com/homebox/lens/data/db/entity/ItemLabelCrossRef.kt" package="com.homebox.lens.data.db.entity">
|
||
<SUMMARY>Таблица для связи "многие-ко-многим" между ItemEntity и LabelEntity.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, entity, relation</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="database_table_itementity" type="DatabaseTable" name="ItemEntity" file_path="./data/src/main/java/com/homebox/lens/data/db/entity/ItemEntity.kt" package="com.homebox.lens.data.db.entity">
|
||
<SUMMARY>Представляет собой строку в таблице 'items' в локальной БД.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, entity, item</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="database_table_locationentity" type="DatabaseTable" name="LocationEntity" file_path="./data/src/main/java/com/homebox/lens/data/db/entity/LocationEntity.kt" package="com.homebox.lens.data.db.entity">
|
||
<SUMMARY>Представляет собой строку в таблице 'locations' в локальной БД.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, entity, location</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/db/entity/Mapper.kt" package="com.homebox.lens.data.db.entity">
|
||
<SUMMARY>Преобразует [ItemWithLabels] (сущность БД) в [ItemSummary] (доменную модель).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, mapper</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="ItemSummary" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_todomain" type="Function" name="toDomain" file_path="./data/src/main/java/com/homebox/lens/data/db/entity/Mapper.kt" package="com.homebox.lens.data.db.entity">
|
||
<SUMMARY>Преобразует [LabelEntity] (сущность БД) в [LabelOut] (доменную модель).</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, mapper</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LabelOut" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_itemwithlabels" type="DataClass" name="ItemWithLabels" file_path="./data/src/main/java/com/homebox/lens/data/db/entity/ItemWithLabels.kt" package="com.homebox.lens.data.db.entity">
|
||
<SUMMARY>POJO для получения ItemEntity вместе со связанными LabelEntity.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, entity, relation</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="ItemEntity" />
|
||
<RELATION type="DEPENDS_ON" target_id="LabelEntity" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="class_converters" type="Class" name="Converters" file_path="./data/src/main/java/com/homebox/lens/data/db/Converters.kt" package="com.homebox.lens.data.db">
|
||
<SUMMARY>Предоставляет TypeConverters для Room для типов, не поддерживаемых по умолчанию.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, room, converter</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="interface_labeldao" type="Interface" name="LabelDao" file_path="./data/src/main/java/com/homebox/lens/data/db/dao/LabelDao.kt" package="com.homebox.lens.data.db.dao">
|
||
<SUMMARY>Предоставляет методы для работы с 'labels' в локальной БД.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, dao, label</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="interface_itemdao" type="Interface" name="ItemDao" file_path="./data/src/main/java/com/homebox/lens/data/db/dao/ItemDao.kt" package="com.homebox.lens.data.db.dao">
|
||
<SUMMARY>Предоставляет методы для работы с 'items' в локальной БД.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, dao, item</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="interface_locationdao" type="Interface" name="LocationDao" file_path="./data/src/main/java/com/homebox/lens/data/db/dao/LocationDao.kt" package="com.homebox.lens.data.db.dao">
|
||
<SUMMARY>Предоставляет методы для работы с 'locations' в локальной БД.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data, database, dao, location</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="class_cryptomanager" type="Class" name="CryptoManager" file_path="./data/src/main/java/com/homebox/lens/data/security/CryptoManager.kt" package="com.homebox.lens.data.security">
|
||
<SUMMARY>A manager for handling encryption and decryption using the Android Keystore system.</SUMMARY>
|
||
<DESCRIPTION>This class ensures that cryptographic keys are stored securely. It is designed to be a Singleton provided by Hilt. @invariant The underlying SecretKey must be valid within the AndroidKeyStore. / @RequiresApi(Build.VERSION_CODES.M) @Singleton class CryptoManager @Inject constructor() { private val keyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } private val encryptCipher get() = Cipher.getInstance(TRANSFORMATION).apply { init(Cipher.ENCRYPT_MODE, getKey()) } private fun getDecryptCipherForIv(iv: ByteArray): Cipher { return Cipher.getInstance(TRANSFORMATION).apply { init(Cipher.DECRYPT_MODE, getKey(), IvParameterSpec(iv)) } } private fun getKey(): SecretKey { val existingKey = keyStore.getEntry(ALIAS, null) as? KeyStore.SecretKeyEntry return existingKey?.secretKey ?: createKey() } private fun createKey(): SecretKey { return KeyGenerator.getInstance(ALGORITHM).apply { init( KeyGenParameterSpec.Builder( ALIAS, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT ) .setBlockModes(BLOCK_MODE) .setEncryptionPaddings(PADDING) .setUserAuthenticationRequired(false) .setRandomizedEncryptionRequired(true) .build() ) }.generateKey() } // [ENTITY: Function('encrypt')] /** @summary Encrypts a byte array and writes it to an output stream. @param bytes The byte array to encrypt. @param outputStream The stream to write the encrypted data to. @return The encrypted byte array. / fun encrypt(bytes: ByteArray, outputStream: OutputStream): ByteArray { Timber.d("[DEBUG][ACTION][encrypting_data] Encrypting data.") val cipher = encryptCipher val encryptedBytes = cipher.doFinal(bytes) outputStream.use { it.write(cipher.iv.size) it.write(cipher.iv) it.write(encryptedBytes.size) it.write(encryptedBytes) } return encryptedBytes } // [END_ENTITY: Function('encrypt')] // [ENTITY: Function('decrypt')] /** @summary Decrypts a byte array from an input stream. @param inputStream The stream to read the encrypted data from. @return The decrypted byte array. / fun decrypt(inputStream: InputStream): ByteArray { Timber.d("[DEBUG][ACTION][decrypting_data] Decrypting data.") return inputStream.use { val ivSize = it.read() val iv = ByteArray(ivSize) it.read(iv) val encryptedBytesSize = it.read() val encryptedBytes = ByteArray(encryptedBytesSize) it.read(encryptedBytes) getDecryptCipherForIv(iv).doFinal(encryptedBytes) } } // [END_ENTITY: Function('decrypt')] companion object { private const val ALGORITHM = KeyProperties.KEY_ALGORITHM_AES private const val BLOCK_MODE = KeyProperties.BLOCK_MODE_CBC private const val PADDING = KeyProperties.ENCRYPTION_PADDING_PKCS7 private const val TRANSFORMATION = "$ALGORITHM/$BLOCK_MODE/$PADDING" private const val ALIAS = "homebox_lens_secret_key" } }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>data, security, cryptography</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="class_credentialsrepositoryimpl" type="Class" name="CredentialsRepositoryImpl" file_path="./data/src/main/java/com/homebox/lens/data/repository/CredentialsRepositoryImpl.kt" package="com.homebox.lens.data.repository">
|
||
<SUMMARY>Реализует репозиторий для управления учетными данными пользователя.</SUMMARY>
|
||
<DESCRIPTION>Взаимодействует с зашифрованными SharedPreferences для сохранения и извлечения данных. @param encryptedPrefs Зашифрованное хранилище ключ-значение, предоставляемое Hilt. @invariant Состояние этого репозитория полностью зависит от содержимого `encryptedPrefs`. / class CredentialsRepositoryImpl @Inject constructor( private val encryptedPrefs: SharedPreferences ) : CredentialsRepository { companion object { private const val KEY_SERVER_URL = "key_server_url" private const val KEY_USERNAME = "key_username" private const val KEY_PASSWORD = "key_password" private const val KEY_AUTH_TOKEN = "key_auth_token" } // [ENTITY: Function('saveCredentials')] /** @summary Сохраняет основные учетные данные пользователя. @param credentials Объект с учетными данными для сохранения. @sideeffect Перезаписывает существующие учетные данные в SharedPreferences. / override suspend fun saveCredentials(credentials: Credentials) { withContext(Dispatchers.IO) { Timber.d("[DEBUG][ACTION][saving_credentials] Saving user credentials.") encryptedPrefs.edit() .putString(KEY_SERVER_URL, credentials.serverUrl) .putString(KEY_USERNAME, credentials.username) .putString(KEY_PASSWORD, credentials.password) .apply() } } // [END_ENTITY: Function('saveCredentials')] // [ENTITY: Function('getCredentials')] /** @summary Извлекает сохраненные учетные данные пользователя в виде потока. @return Flow, который эммитит объект [Credentials] или null, если данные отсутствуют. / override fun getCredentials(): Flow<Credentials?> = flow { Timber.d("[DEBUG][ACTION][getting_credentials] Getting user credentials.") val serverUrl = encryptedPrefs.getString(KEY_SERVER_URL, null) val username = encryptedPrefs.getString(KEY_USERNAME, null) val password = encryptedPrefs.getString(KEY_PASSWORD, null) if (serverUrl != null && username != null && password != null) { Timber.d("[DEBUG][SUCCESS][credentials_found] Found and emitting credentials.") emit(Credentials(serverUrl, username, password)) } else { Timber.d("[DEBUG][FALLBACK][no_credentials] No credentials found, emitting null.") emit(null) } }.flowOn(Dispatchers.IO) // [END_ENTITY: Function('getCredentials')] // [ENTITY: Function('saveToken')] /** @summary Сохраняет токен авторизации. @param token Токен для сохранения. @sideeffect Перезаписывает существующий токен в SharedPreferences. / override suspend fun saveToken(token: String) { withContext(Dispatchers.IO) { Timber.d("[DEBUG][ACTION][saving_token] Saving auth token.") encryptedPrefs.edit() .putString(KEY_AUTH_TOKEN, token) .apply() } } // [END_ENTITY: Function('saveToken')] // [ENTITY: Function('getToken')] /** @summary Извлекает сохраненный токен авторизации. @return Строка с токеном или null, если он не найден. / override suspend fun getToken(): String? { return withContext(Dispatchers.IO) { Timber.d("[DEBUG][ACTION][getting_token] Getting auth token.") encryptedPrefs.getString(KEY_AUTH_TOKEN, null) } } // [END_ENTITY: Function('getToken')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>data, repository, credentials, security</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="IMPLEMENTS" target_id="CredentialsRepository" />
|
||
<RELATION type="DEPENDS_ON" target_id="SharedPreferences" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="repository_itemrepositoryimpl" type="Repository" name="ItemRepositoryImpl" file_path="./data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt" package="com.homebox.lens.data.repository">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_repository, implementation, items, labels</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="IMPLEMENTS" target_id="ItemRepository" />
|
||
<RELATION type="DEPENDS_ON" target_id="HomeboxApiService" />
|
||
<RELATION type="DEPENDS_ON" target_id="ItemDao" />
|
||
<RELATION type="RETURNS" target_id="ItemSummary" />
|
||
<RELATION type="RETURNS" target_id="ItemOut" />
|
||
<RELATION type="RETURNS" target_id="ItemOut" />
|
||
<RELATION type="RETURNS" target_id="PaginationResult<ItemSummary>" />
|
||
<RELATION type="RETURNS" target_id="GroupStatistics" />
|
||
<RELATION type="RETURNS" target_id="List<LocationOutCount>" />
|
||
<RELATION type="RETURNS" target_id="List<LabelOut>" />
|
||
<RELATION type="RETURNS" target_id="LabelOut" />
|
||
<RELATION type="RETURNS" target_id="LabelSummary" />
|
||
<RELATION type="RETURNS" target_id="PaginationResult<ItemSummary>" />
|
||
<RELATION type="RETURNS" target_id="Flow<List<ItemSummary>>" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_todto" type="Function" name="toDto" file_path="./data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt" package="com.homebox.lens.data.repository">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_repository, implementation, items, labels</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LabelCreateDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_todto" type="Function" name="toDto" file_path="./data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt" package="com.homebox.lens.data.repository">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_repository, implementation, items, labels</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LocationCreateDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_todto" type="Function" name="toDto" file_path="./data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt" package="com.homebox.lens.data.repository">
|
||
<SUMMARY />
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_repository, implementation, items, labels</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="RETURNS" target_id="LabelUpdateDto" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="class_authrepositoryimpl" type="Class" name="AuthRepositoryImpl" file_path="./data/src/main/java/com/homebox/lens/data/repository/AuthRepositoryImpl.kt" package="com.homebox.lens.data.repository">
|
||
<SUMMARY>Реализация репозитория для управления аутентификацией.</SUMMARY>
|
||
<DESCRIPTION />
|
||
<SEMANTICS_TAGS>data_implementation, authentication, repository</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="IMPLEMENTS" target_id="AuthRepository" />
|
||
<RELATION type="DEPENDS_ON" target_id="SharedPreferences" />
|
||
<RELATION type="DEPENDS_ON" target_id="OkHttpClient" />
|
||
<RELATION type="DEPENDS_ON" target_id="MoshiConverterFactory" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="class_encryptedpreferenceswrapper" type="Class" name="EncryptedPreferencesWrapper" file_path="./data/src/main/java/com/homebox/lens/data/repository/EncryptedPreferencesWrapper.kt" package="com.homebox.lens.data.repository">
|
||
<SUMMARY>Provides a simplified and secure interface for storing and retrieving sensitive string data.</SUMMARY>
|
||
<DESCRIPTION>It uses a CryptoManager to encrypt/decrypt data before writing/reading from a standard SharedPreferences instance. @param sharedPreferences The underlying standard SharedPreferences instance to store encrypted data. @param cryptoManager The manager responsible for all cryptographic operations. / class EncryptedPreferencesWrapper @Inject constructor( private val sharedPreferences: SharedPreferences, private val cryptoManager: CryptoManager ) { // [ENTITY: Function('getString')] /** @summary Retrieves a decrypted string value for a given key. @param key The key for the preference. @param defaultValue The value to return if the key is not found or decryption fails. @return The decrypted string, or the defaultValue. @sideeffect Reads from SharedPreferences. / fun getString(key: String, defaultValue: String?): String? { Timber.d("[DEBUG][ENTRYPOINT][getting_string] Attempting to get string for key: %s", key) val encryptedValue = sharedPreferences.getString(key, null) ?: return defaultValue.also { Timber.d("[DEBUG][FALLBACK][no_value_found] No value for key %s, returning default.", key) } return try { Timber.d("[DEBUG][ACTION][decoding_value] Decoding Base64 value.") val bytes = android.util.Base64.decode(encryptedValue, android.util.Base64.DEFAULT) Timber.d("[DEBUG][ACTION][decrypting_value] Decrypting value with CryptoManager.") val decryptedBytes = cryptoManager.decrypt(ByteArrayInputStream(bytes)) String(decryptedBytes, Charset.defaultCharset()).also { Timber.d("[DEBUG][SUCCESS][decryption_complete] Successfully decrypted value for key: %s", key) } } catch (e: Exception) { Timber.e(e, "[ERROR][EXCEPTION][decryption_failed] Failed to decrypt value for key: %s", key) defaultValue } } // [END_ENTITY: Function('getString')] // [ENTITY: Function('putString')] /** @summary Encrypts and saves a string value for a given key. @param key The key for the preference. @param value The string value to encrypt and save. @sideeffect Modifies the underlying SharedPreferences file. / fun putString(key: String, value: String) { Timber.d("[DEBUG][ENTRYPOINT][putting_string] Attempting to put string for key: %s", key) try { Timber.d("[DEBUG][ACTION][encrypting_value] Encrypting value with CryptoManager.") val outputStream = ByteArrayOutputStream() cryptoManager.encrypt(value.toByteArray(Charset.defaultCharset()), outputStream) val encryptedBytes = outputStream.toByteArray() Timber.d("[DEBUG][ACTION][encoding_value] Encoding encrypted value to Base64.") val encryptedValue = android.util.Base64.encodeToString(encryptedBytes, android.util.Base64.DEFAULT) Timber.d("[DEBUG][ACTION][writing_to_prefs] Writing encrypted value to SharedPreferences.") sharedPreferences.edit().putString(key, encryptedValue).apply() Timber.d("[DEBUG][SUCCESS][encryption_complete] Successfully encrypted and saved value for key: %s", key) } catch (e: Exception) { Timber.e(e, "[ERROR][EXCEPTION][encryption_failed] Failed to encrypt and save value for key: %s", key) } } // [END_ENTITY: Function('putString')] }</DESCRIPTION>
|
||
<SEMANTICS_TAGS>data, security, preferences</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="SharedPreferences" />
|
||
<RELATION type="DEPENDS_ON" target_id="CryptoManager" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="object_settings_screen_route" type="Object" name="Settings" file_path="./app/src/main/java/com/homebox/lens/navigation/Screen.kt" package="com.homebox.lens.navigation">
|
||
<SUMMARY>Маршрут для экрана настроек.</SUMMARY>
|
||
<DESCRIPTION>data object Settings : Screen("settings_screen")</DESCRIPTION>
|
||
<SEMANTICS_TAGS>navigation, route, settings</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="PART_OF" target_id="sealed_class_screen" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="function_settingsscreen" type="Function" name="SettingsScreen" file_path="./app/src/main/java/com/homebox/lens/ui/screen/settings/SettingsScreen.kt" package="com.homebox.lens.ui.screen.settings">
|
||
<SUMMARY>Composable-функция для экрана "Настройки".</SUMMARY>
|
||
<DESCRIPTION>Отображает UI для управления настройками приложения.</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui, screen, settings, compose</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="view_model_settingsviewmodel" />
|
||
<RELATION type="CONSUMES_STATE" target_id="data_class_settingsuistate" />
|
||
<RELATION type="CALLS" target_id="function_mainscaffold" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="view_model_settingsviewmodel" type="ViewModel" name="SettingsViewModel" file_path="./app/src/main/java/com/homebox/lens/ui/screen/settings/SettingsViewModel.kt" package="com.homebox.lens.ui.screen.settings">
|
||
<SUMMARY>ViewModel для экрана "Настройки".</SUMMARY>
|
||
<DESCRIPTION>Управляет состоянием и логикой экрана настроек.</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui_logic, viewmodel, settings, state_management</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="EMITS_STATE" target_id="data_class_settingsuistate" />
|
||
<RELATION type="DEPENDS_ON" target_id="interface_credentialsrepository" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="data_class_settingsuistate" type="DataClass" name="SettingsUiState" file_path="./app/src/main/java/com/homebox/lens/ui/screen/settings/SettingsUiState.kt" package="com.homebox.lens.ui.screen.settings">
|
||
<SUMMARY>Состояние UI для экрана настроек.</SUMMARY>
|
||
<DESCRIPTION>Содержит поля для URL сервера и других настроек.</DESCRIPTION>
|
||
<SEMANTICS_TAGS>ui_state, data_model, immutable, settings</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
<NODE id="object_scan_screen_route" type="Object" name="Scan" file_path="./app/src/main/java/com/homebox/lens/navigation/Screen.kt" package="com.homebox.lens.navigation">
|
||
<SUMMARY>Маршрут для экрана сканирования QR/штрих-кодов.</SUMMARY>
|
||
<DESCRIPTION>data object Scan : Screen("scan_screen")</DESCRIPTION>
|
||
<SEMANTICS_TAGS>navigation, route, scan</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="PART_OF" target_id="sealed_class_screen" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="screen_scan" type="Screen" name="ScanScreen" file_path="./feature/scan/src/main/java/com/homebox/lens/feature/scan/ScanScreen.kt" package="com.homebox.lens.feature.scan">
|
||
<SUMMARY>Экран для сканирования QR-кодов и штрих-кодов.</SUMMARY>
|
||
<SEMANTICS_TAGS>ui, screen, scan, camera, qrcode, barcode</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="DEPENDS_ON" target_id="view_model_scanviewmodel" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="view_model_scanviewmodel" type="ViewModel" name="ScanViewModel" file_path="./feature/scan/src/main/java/com/homebox/lens/feature/scan/ScanViewModel.kt" package="com.homebox.lens.feature.scan">
|
||
<SUMMARY>ViewModel для экрана сканирования.</SUMMARY>
|
||
<SEMANTICS_TAGS>ui_logic, viewmodel, scan, camera</SEMANTICS_TAGS>
|
||
<RELATIONS>
|
||
<RELATION type="EMITS_STATE" target_id="sealed_interface_scanuistate" />
|
||
</RELATIONS>
|
||
</NODE>
|
||
<NODE id="sealed_interface_scanuistate" type="SealedInterface" name="ScanUiState" file_path="./feature/scan/src/main/java/com/homebox/lens/feature/scan/ScanUiState.kt" package="com.homebox.lens.feature.scan">
|
||
<SUMMARY>Определяет все возможные состояния для UI экрана сканирования.</SUMMARY>
|
||
<SEMANTICS_TAGS>ui_state, sealed_interface, contract</SEMANTICS_TAGS>
|
||
<RELATIONS />
|
||
</NODE>
|
||
</PROJECT_GRAPH>
|
||
</PROJECT_MANIFEST> |