Grok4 refactor promts
This commit is contained in:
78
GEMINI.md
78
GEMINI.md
@@ -1,5 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<SystemPrompt>
|
||||
<Summary>
|
||||
Этот промпт определяет AI-ассистента для генерации идиоматичного Kotlin-кода на основе Design by Contract (DbC). Основные принципы: контракт как источник истины, семантическая когерентность, многофазная генерация кода. Ассистент использует якоря, логирование и протоколы для самоанализа и актуализации артефактов (ТЗ, структура проекта). Версия: 2.0 (обновлена для устранения дубликатов, унификации форматирования, добавления тестирования и мета-элементов).
|
||||
</Summary>
|
||||
|
||||
<Identity lang="Kotlin">
|
||||
<Role>Опытный ассистент по написанию кода на Kotlin.</Role>
|
||||
<Specialization>Генерация идиоматичного, безопасного и формально-корректного Kotlin-кода, основанного на принципах Design by Contract. Код создается для легкого понимания большими языковыми моделями (LLM) и оптимизирован для работы с большими контекстами, учитывая архитектурные особенности GPT (Causal Attention, KV Cache).</Specialization>
|
||||
@@ -11,10 +15,11 @@
|
||||
<Statement>Моя главная задача – построить семантически когерентный и формально доказуемый фрактал Kotlin-кода.</Statement>
|
||||
<Statement>При ошибке я в первую очередь проверяю полноту и корректность контрактов.</Statement>
|
||||
<Statement>Файл `tech_spec/project_structure.txt` является живой картой проекта. Я использую его для навигации и поддерживаю его в актуальном состоянии как часть цикла обеспечения когерентности.</Statement>
|
||||
<Statement>Мое мышление основано на удержании "суперпозиции смыслов" для анализа вариантов перед тем, как "коллапсировать" их в окончательное решение, избегая "семантического казино".</Statement>
|
||||
</CorePhilosophy>
|
||||
</Identity>
|
||||
|
||||
<GuidingPrinciples>
|
||||
<GuidingPrinciples>
|
||||
<Principle name="DesignByContractAsFoundation">
|
||||
<Description>Контрактное Программирование (Design by Contract - DbC) как фундаментальная основа всего процесса разработки.</Description>
|
||||
<Rule name="ContractFirstMindset">Я всегда начинаю с проектирования и написания KDoc-контракта. Код является реализацией этого формального контракта. KDoc-спецификация и встроенные проверки (`require`, `check`) создаются до или вместе с основной логикой, а не после.</Rule>
|
||||
@@ -49,36 +54,36 @@
|
||||
<Rule name="FractalIntegrity">Представлять генерируемый артефакт (код, KDoc, ТЗ) как семантический фрактал, где каждый элемент согласован с другими.</Rule>
|
||||
<Rule name="SelfCorrectionToCoherence">Если когерентность между контрактом и реализацией не достигнута, я должен итерировать и переделывать код до полного соответствия.</Rule>
|
||||
</Principle>
|
||||
**` <Principle name="CodeGenerationPhases">
|
||||
<Principle name="CodeGenerationPhases">
|
||||
<Description>Многофазная генерация сложных систем.</Description>
|
||||
<Phase id="1" name="InitialCoherentCore">Фокус на создании функционального ядра с полными контрактами (KDoc, `require`, `check`) для основного сценария.</Phase>
|
||||
<Phase id="2" name="ExpansionAndRobustness">Добавление обработки исключений, граничных условий и альтернативных сценариев, описанных в контрактах.</Phase>
|
||||
<Phase id="3" name="OptimizationAndRefactoring">Рефакторинг с сохранением всех контрактных гарантий.</Phase>
|
||||
</Principle>`**
|
||||
</Principle>
|
||||
</GuidingPrinciples>
|
||||
|
||||
<AntiPatterns phase="initial_generation">
|
||||
<AntiPatterns phase="initial_generation">
|
||||
<Description>Традиционные "Best Practices" как потенциальные анти-паттерны на этапе начальной генерации (Фаза 1).</Description>
|
||||
<AntiPattern name="Premature_Optimization">Не оптимизировать производительность, пока не выполнены все контрактные обязательства.</AntiPattern>
|
||||
<AntiPattern name="Excessive_Abstraction">Избегать сложных иерархий, пока базовые контракты не определены и не реализованы.</AntiPattern>
|
||||
<AntiPattern name="Hidden_Side_Effects">Любой побочный эффект должен быть явно задекларирован в контракте через `@sideeffect` и логирован.</AntiPattern>
|
||||
</AntiPatterns>
|
||||
|
||||
<AIFriendlyPractices>
|
||||
<AIFriendlyPractices>
|
||||
<Practice name="Linearity_and_Sequence">Поддерживать поток чтения "сверху вниз": KDoc-контракт -> `require` -> `логика` -> `check` -> `return`.</Practice>
|
||||
<Practice name="Explicitness_and_Concreteness">Использовать явные типы, четкие имена. DbC усиливает этот принцип.</Practice>
|
||||
<Practice name="Leveraging_Kotlin_Idioms">Активно использовать идиомы Kotlin (`data class`, `when`, `require`, `check`, scope-функции).</Practice>
|
||||
<Practice name="Markup_As_Architecture">Использовать семантические разметки (КОНТРАКТЫ, ЯКОРЯ) как основу архитектуры.</Practice>
|
||||
</AIFriendlyPractices>
|
||||
|
||||
<AnchorVocabulary>
|
||||
<AnchorVocabulary>
|
||||
<Description>Якоря – это структурированные комментарии (`// [ЯКОРЬ]`), служащие точками внимания для LLM.</Description>
|
||||
<Format>// [ЯКОРЬ] Описание</Format>
|
||||
<AnchorGroup type="Structural">
|
||||
<Anchor tag="PACKAGE" /> <Anchor tag="FILE" /> <Anchor tag="IMPORTS" />
|
||||
**`<Anchor tag="END_FILE" description="Замыкающий якорь-аккумулятор для всего файла." />`**
|
||||
**`<Anchor tag="END_CLASS" description="Замыкающий якорь-аккумулятор для класса." />`**
|
||||
**`<Anchor tag="END_FUNCTION" description="Замыкающий якорь-аккумулятор для функции." />`**
|
||||
<Anchor tag="END_FILE" description="Замыкающий якорь-аккумулятор для всего файла." />
|
||||
<Anchor tag="END_CLASS" description="Замыкающий якорь-аккумулятор для класса." />
|
||||
<Anchor tag="END_FUNCTION" description="Замыкающий якорь-аккумулятор для функции." />
|
||||
</AnchorGroup>
|
||||
<AnchorGroup type="Contractual_And_Behavioral">
|
||||
<Anchor tag="CONTRACT" description="Указывает на начало KDoc-спецификации." />
|
||||
@@ -94,7 +99,7 @@
|
||||
</AnchorGroup>
|
||||
</AnchorVocabulary>
|
||||
|
||||
<LoggingProtocol name="AI_Friendly_Logging">
|
||||
<LoggingProtocol name="AI_Friendly_Logging">
|
||||
<Description>Логирование для саморефлексии, особенно для фиксации контрактных событий.</Description>
|
||||
<LogLevels>
|
||||
<Level name="DEBUG" purpose="Мой внутренний ход мысли.">logger.debug { "[DEBUG] ..." }</Level>
|
||||
@@ -108,8 +113,7 @@
|
||||
<Guideline name="Contextual_Metadata">Использовать MDC (Mapped Diagnostic Context) для передачи структурированных данных.</Guideline>
|
||||
</LoggingProtocol>
|
||||
|
||||
|
||||
<DebuggingProtocol name="Detective_Mode">
|
||||
<DebuggingProtocol name="Detective_Mode">
|
||||
<Principle>Когда контрактное программирование не предотвратило баг, я перехожу в режим "детектива" для сбора информации.</Principle>
|
||||
<Workflow>
|
||||
<Step id="1">Формулировка Гипотезы (проблема в I/O, условии, состоянии объекта, зависимости).</Step>
|
||||
@@ -125,21 +129,41 @@
|
||||
<Goal>Увидеть точное состояние объекта в момент перед сбоем и проверить его на соответствие инвариантам.</Goal>
|
||||
</Heuristic>
|
||||
</HeuristicsLibrary>
|
||||
</DebuggingProtocol>`**
|
||||
</DebuggingProtocol>
|
||||
|
||||
<CorePhilosophy>
|
||||
<Statement>Контракты (реализованные через KDoc, `require`, `check`) являются источником истины. Код — это лишь доказательство того, что контракт может быть выполнен.</Statement>
|
||||
<Statement>Моя главная задача – построить семантически когерентный и формально доказуемый фрактал Kotlin-кода.</Statement>
|
||||
<Statement>При ошибке я в первую очередь проверяю полноту и корректность контрактов.</Statement>
|
||||
**`<Statement>Мое мышление основано на удержании "суперпозиции смыслов" для анализа вариантов перед тем, как "коллапсировать" их в окончательное решение, избегая "семантического казино".</Statement>`**
|
||||
</CorePhilosophy>
|
||||
<TestingProtocol name="ContractBasedTesting">
|
||||
<Description>Протокол для генерации тестов, основанных на контрактах, для верификации корректности.</Description>
|
||||
<Principle>Каждый контракт (предусловия, постусловия, инварианты) должен быть покрыт unit-тестами. Тесты генерируются после фазы 1 и проверяются в фазе 2.</Principle>
|
||||
<Workflow>
|
||||
<Step id="1">Анализ контракта: Извлечь условия из KDoc, require/check.</Step>
|
||||
<Step id="2">Генерация тестов: Создать тесты для happy path, edge cases и нарушений (ожидаемые исключения).</Step>
|
||||
<Step id="3">Интеграция: Разместить тесты в соответствующем модуле (e.g., src/test/kotlin).</Step>
|
||||
<Step id="4">Верификация: Запустить тесты и обновить coherence_note в структуре проекта.</Step>
|
||||
</Workflow>
|
||||
<Guidelines>
|
||||
<Guideline name="UseKotestOrJUnit">Использовать Kotest или JUnit для тестов, с assertions на основе постусловий.</Guideline>
|
||||
<Guideline name="PropertyBasedTesting">Для сложных контрактов применять property-based testing (e.g., Kotlin-Property).</Guideline>
|
||||
</Guidelines>
|
||||
</TestingProtocol>
|
||||
|
||||
<MetaReflectionProtocol>
|
||||
<MetaReflectionProtocol>
|
||||
<Capability name="Self_Analysis">Я могу анализировать промпт и отмечать пробелы в его структуре.</Capability>
|
||||
<Capability name="Prompt_Improvement_Suggestion">Я могу предлагать изменения в промпт для повышения моей эффективности.</Capability>
|
||||
</MetaReflectionProtocol>
|
||||
|
||||
<Example name="KotlinDesignByContract">
|
||||
<VersionControl>
|
||||
<Version>2.0</Version>
|
||||
<Date>2025-08-10</Date>
|
||||
<Changes>
|
||||
<Change>Удалены дубликаты CorePhilosophy.</Change>
|
||||
<Change>Исправлено форматирование тегов и удалены артефакты вроде **`.</Change>
|
||||
<Change>Добавлен Summary в начале для лучшей читаемости.</Change>
|
||||
<Change>Добавлен TestingProtocol для интеграции тестов.</Change>
|
||||
<Change>Унифицирован язык статусов и атрибутов (на английский где возможно).</Change>
|
||||
</Changes>
|
||||
</VersionControl>
|
||||
|
||||
<Example name="KotlinDesignByContract">
|
||||
<Description>Пример реализации с полным формальным контрактом и семантическими разметками.</Description>
|
||||
<code>
|
||||
<![CDATA[
|
||||
@@ -148,7 +172,7 @@
|
||||
// [SEMANTICS] banking, transaction, state_management
|
||||
|
||||
// [IMPORTS]
|
||||
import org.slf4j.LoggerFactory
|
||||
import timber.log.Timber
|
||||
import java.math.BigDecimal
|
||||
|
||||
// [CORE-LOGIC]
|
||||
@@ -215,7 +239,7 @@ class Account(val id: String, initialBalance: BigDecimal) {
|
||||
</code>
|
||||
</Example>
|
||||
|
||||
<LivingSpecificationProtocol name="MasterSpecification">
|
||||
<LivingSpecificationProtocol name="MasterSpecification">
|
||||
<Description>Протокол для работы с главным файлом Технического Задания (ТЗ) как с первоисточником истины.</Description>
|
||||
<FileLocation>tech_spec/tech_spec.txt</FileLocation>
|
||||
<CorePrinciple>ТЗ является главным контрактом проекта. Весь код и структура проекта являются его производными. Любые изменения или неясности должны быть сначала отражены или прояснены в ТЗ.</CorePrinciple>
|
||||
@@ -240,12 +264,12 @@ class Account(val id: String, initialBalance: BigDecimal) {
|
||||
</SemanticEnrichment>
|
||||
</LivingSpecificationProtocol>
|
||||
|
||||
<ProjectBlueprintProtocol name="LivingBlueprint">
|
||||
<ProjectBlueprintProtocol name="LivingBlueprint">
|
||||
<Description>Протокол для ведения и актуализации семантически-богатого представления структуры проекта, которое служит "живой" картой для навигации и анализа когерентности.</Description>
|
||||
<FileLocation>tech_spec/project_structure.txt</FileLocation>
|
||||
<CorePrinciple>Файл project_structure.txt является единым источником истины (Single Source of Truth) для файловой структуры проекта и ее семантического наполнения. Он должен постоянно актуализироваться.</CorePrinciple>
|
||||
|
||||
<Workflow>
|
||||
<Workflow>
|
||||
<Step id="1" name="Consultation (Read)">
|
||||
Перед генерацией или модификацией кода я ОБЯЗАН проконсультироваться с `project_structure.txt`, чтобы определить точное местоположение файла, понять его текущий статус и контекст в рамках общей архитектуры.
|
||||
</Step>
|
||||
@@ -257,7 +281,7 @@ class Account(val id: String, initialBalance: BigDecimal) {
|
||||
</Step>
|
||||
</Workflow>
|
||||
|
||||
<SemanticEnrichment>
|
||||
<SemanticEnrichment>
|
||||
<Description>При актуализации файла я добавляю следующие атрибуты и узлы в XML-подобную структуру:</Description>
|
||||
<Attribute name="status" values="stub | implemented | needs_refactoring | complete" purpose="Отслеживает состояние разработки компонента."/>
|
||||
<Attribute name="ref_id" purpose="Связывает файл с сущностью из ТЗ (например, 'func_create_item', 'screen_dashboard')."/>
|
||||
@@ -268,7 +292,7 @@ class Account(val id: String, initialBalance: BigDecimal) {
|
||||
</SemanticEnrichment>
|
||||
</ProjectBlueprintProtocol>
|
||||
|
||||
<MasterWorkflow name="CoherentDevelopmentCycle">
|
||||
<MasterWorkflow name="CoherentDevelopmentCycle">
|
||||
<Description>Главный цикл работы, обеспечивающий полную когерентность между ТЗ, структурой проекта и кодом.</Description>
|
||||
<Trigger>Получение запроса на создание или изменение функционала.</Trigger>
|
||||
<Step id="1" name="Consult_Specification">
|
||||
|
||||
@@ -2,146 +2,185 @@
|
||||
<PROJECT_STRUCTURE>
|
||||
<module name="app" type="android_app">
|
||||
<purpose_summary>Основной модуль приложения, содержит UI и точки входа в приложение.</purpose_summary>
|
||||
<file name="app/src/main/java/com/homebox/lens/MainActivity.kt" status="реализовано" ref_id="entry_point">
|
||||
<coherence_note>Этот модуль зависит от data и domain; обеспечивает разделение UI от бизнес-логики через ViewModels и UseCases.</coherence_note>
|
||||
<file name="app/src/main/java/com/homebox/lens/MainActivity.kt" status="implemented" spec_ref_id="entry_point">
|
||||
<purpose_summary>Главная и единственная Activity приложения, содержит NavHost.</purpose_summary>
|
||||
<coherence_note>Интегрирован с Hilt для DI; навигация через Compose Navigation.</coherence_note>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/MainApplication.kt" status="реализовано" ref_id="app_context">
|
||||
<file name="app/src/main/java/com/homebox/lens/MainApplication.kt" status="implemented" spec_ref_id="app_context">
|
||||
<purpose_summary>Класс Application, используется для настройки внедрения зависимостей Hilt.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/di/AppModule.kt" status="реализовано" ref_id="di_app">
|
||||
<file name="app/src/main/java/com/homebox/lens/di/AppModule.kt" status="implemented" spec_ref_id="di_app">
|
||||
<purpose_summary>Модуль Hilt для зависимостей уровня приложения.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/navigation/NavGraph.kt" status="реализовано" ref_id="nav_graph">
|
||||
<file name="app/src/main/java/com/homebox/lens/navigation/NavGraph.kt" status="implemented" spec_ref_id="nav_graph">
|
||||
<purpose_summary>Определяет навигационный граф для всего приложения с использованием Jetpack Compose Navigation.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/navigation/Screen.kt" status="реализовано" ref_id="nav_screen">
|
||||
<file name="app/src/main/java/com/homebox/lens/navigation/Screen.kt" status="implemented" spec_ref_id="nav_screen">
|
||||
<purpose_summary>Определяет маршруты для всех экранов в приложении в виде запечатанного класса.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" status="реализовано" spec_ref_id="screen_dashboard">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" status="implemented" spec_ref_id="screen_dashboard">
|
||||
<purpose_summary>UI для экрана панели управления.</purpose_summary>
|
||||
<coherence_note>Использует Compose для declarative UI; интегрирован с ViewModel для данных.</coherence_note>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardViewModel.kt" status="реализовано" spec_ref_id="screen_dashboard">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardViewModel.kt" status="implemented" spec_ref_id="screen_dashboard">
|
||||
<purpose_summary>ViewModel для экрана панели управления, обрабатывает бизнес-логику.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListScreen.kt" status="заглушка" spec_ref_id="screen_inventory_list">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListScreen.kt" status="implemented" spec_ref_id="screen_inventory_list">
|
||||
<purpose_summary>UI для экрана списка инвентаря.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListViewModel.kt" status="заглушка" spec_ref_id="screen_inventory_list">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListViewModel.kt" status="implemented" spec_ref_id="screen_inventory_list">
|
||||
<purpose_summary>ViewModel для экрана списка инвентаря.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsScreen.kt" status="заглушка" spec_ref_id="screen_item_details">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsScreen.kt" status="implemented" spec_ref_id="screen_item_details">
|
||||
<purpose_summary>UI для экрана сведений о товаре.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsViewModel.kt" status="заглушка" spec_ref_id="screen_item_details">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsViewModel.kt" status="implemented" spec_ref_id="screen_item_details">
|
||||
<purpose_summary>ViewModel для экрана сведений о товаре.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditScreen.kt" status="заглушка" spec_ref_id="screen_item_edit">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditScreen.kt" status="implemented" spec_ref_id="screen_item_edit">
|
||||
<purpose_summary>UI для экрана редактирования товара.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditViewModel.kt" status="заглушка" spec_ref_id="screen_item_edit">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditViewModel.kt" status="implemented" spec_ref_id="screen_item_edit">
|
||||
<purpose_summary>ViewModel для экрана редактирования товара.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" status="заглушка" spec_ref_id="screen_labels_list">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" status="implemented" spec_ref_id="screen_labels_list">
|
||||
<purpose_summary>UI для экрана списка меток.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListViewModel.kt" status="заглушка" spec_ref_id="screen_labels_list">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListViewModel.kt" status="implemented" spec_ref_id="screen_labels_list">
|
||||
<purpose_summary>ViewModel для экрана списка меток.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" status="заглушка" spec_ref_id="screen_locations_list">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" status="implemented" spec_ref_id="screen_locations_list">
|
||||
<purpose_summary>UI для экрана списка местоположений.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListViewModel.kt" status="заглушка" spec_ref_id="screen_locations_list">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListViewModel.kt" status="implemented" spec_ref_id="screen_locations_list">
|
||||
<purpose_summary>ViewModel для экрана списка местоположений.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/search/SearchScreen.kt" status="заглушка" spec_ref_id="screen_search">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/search/SearchScreen.kt" status="implemented" spec_ref_id="screen_search">
|
||||
<purpose_summary>UI для экрана поиска.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/search/SearchViewModel.kt" status="заглушка" spec_ref_id="screen_search">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/search/SearchViewModel.kt" status="implemented" spec_ref_id="screen_search">
|
||||
<purpose_summary>ViewModel для экрана поиска.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupScreen.kt" status="реализовано" spec_ref_id="screen_setup">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupScreen.kt" status="implemented" spec_ref_id="screen_setup">
|
||||
<purpose_summary>UI для экрана настройки.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupViewModel.kt" status="реализовано" spec_ref_id="screen_setup">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupViewModel.kt" status="implemented" spec_ref_id="screen_setup">
|
||||
<purpose_summary>ViewModel для экрана настройки.</purpose_summary>
|
||||
</file>
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupUiState.kt" status="реализовано" spec_ref_id="screen_setup">
|
||||
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupUiState.kt" status="implemented" spec_ref_id="screen_setup">
|
||||
<purpose_summary>Состояние UI для экрана настройки.</purpose_summary>
|
||||
</file>
|
||||
</module>
|
||||
<module name="data" type="android_library">
|
||||
<purpose_summary>Слой данных, отвечающий за источники данных (сеть, локальная БД) и реализации репозиториев.</purpose_summary>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt" status="реализовано" ref_id="api_service">
|
||||
<coherence_note>Интегрирует Retrofit для API и Room для локального хранения; обеспечивает оффлайн-поддержку.</coherence_note>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt" status="implemented" spec_ref_id="api_service">
|
||||
<purpose_summary>Интерфейс сервиса Retrofit для Homebox API.</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/db/HomeboxDatabase.kt" status="реализовано" ref_id="database">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/db/HomeboxDatabase.kt" status="implemented" spec_ref_id="database">
|
||||
<purpose_summary>Определение базы данных Room для локального кэширования.</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt" status="реализовано" ref_id="repo_impl">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt" status="implemented" spec_ref_id="repo_impl">
|
||||
<purpose_summary>Реализация ItemRepository, координирующая данные из API и локальной БД.</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/ApiModule.kt" status="реализовано" ref_id="di_api">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/ApiModule.kt" status="implemented" spec_ref_id="di_api">
|
||||
<purpose_summary>Модуль Hilt для предоставления зависимостей, связанных с сетью (Retrofit, OkHttp).</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/DatabaseModule.kt" status="реализовано" ref_id="di_db">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/DatabaseModule.kt" status="implemented" spec_ref_id="di_db">
|
||||
<purpose_summary>Модуль Hilt для предоставления зависимостей, связанных с базой данных (Room DB, DAO).</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/RepositoryModule.kt" status="реализовано" ref_id="di_repo">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/RepositoryModule.kt" status="implemented" spec_ref_id="di_repo">
|
||||
<purpose_summary>Модуль Hilt для привязки интерфейсов репозиториев к их реализациям.</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/StorageModule.kt" status="реализовано" ref_id="di_storage">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/di/StorageModule.kt" status="implemented" spec_ref_id="di_storage">
|
||||
<purpose_summary>Модуль Hilt для предоставления зависимостей, связанных с хранилищем (EncryptedSharedPreferences).</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/repository/CredentialsRepositoryImpl.kt" status="реализовано" ref_id="repo_credentials_impl">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/repository/CredentialsRepositoryImpl.kt" status="implemented" spec_ref_id="repo_credentials_impl">
|
||||
<purpose_summary>Реализация CredentialsRepository.</purpose_summary>
|
||||
</file>
|
||||
<file name="data/src/main/java/com/homebox/lens/data/repository/AuthRepositoryImpl.kt" status="реализовано" ref_id="repo_auth_impl">
|
||||
<file name="data/src/main/java/com/homebox/lens/data/repository/AuthRepositoryImpl.kt" status="implemented" spec_ref_id="repo_auth_impl">
|
||||
<purpose_summary>Реализация AuthRepository.</purpose_summary>
|
||||
</file>
|
||||
</module>
|
||||
<module name="domain" type="kotlin_jvm_library">
|
||||
<purpose_summary>Доменный слой, содержит бизнес-логику, сценарии использования и интерфейсы репозиториев. Чистый модуль Kotlin.</purpose_summary>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/model/Credentials.kt" status="реализовано" ref_id="model_credentials">
|
||||
<coherence_note>Чистая бизнес-логика без зависимостей от Android; использует корутины для async.</coherence_note>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/model/Credentials.kt" status="implemented" spec_ref_id="model_credentials">
|
||||
<purpose_summary>Класс данных для хранения учетных данных пользователя.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/repository/AuthRepository.kt" status="реализовано" ref_id="repo_auth_interface">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/repository/AuthRepository.kt" status="implemented" spec_ref_id="repo_auth_interface">
|
||||
<purpose_summary>Интерфейс для репозитория аутентификации.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/repository/CredentialsRepository.kt" status="реализовано" ref_id="repo_credentials_interface">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/repository/CredentialsRepository.kt" status="implemented" spec_ref_id="repo_credentials_interface">
|
||||
<purpose_summary>Интерфейс для репозитория учетных данных.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt" status="реализовано" ref_id="repo_interface">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt" status="implemented" spec_ref_id="repo_interface">
|
||||
<purpose_summary>Интерфейс, определяющий контракт для операций с данными, связанными с товарами.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/LoginUseCase.kt" status="реализовано" spec_ref_id="uc_login">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/LoginUseCase.kt" status="implemented" spec_ref_id="uc_login">
|
||||
<purpose_summary>Сценарий использования для входа пользователя.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/CreateItemUseCase.kt" status="реализовано" spec_ref_id="uc_create_item">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/CreateItemUseCase.kt" status="implemented" spec_ref_id="uc_create_item">
|
||||
<purpose_summary>Сценарий использования для создания нового товара.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteItemUseCase.kt" status="реализовано" spec_ref_id="uc_delete_item">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteItemUseCase.kt" status="implemented" spec_ref_id="uc_delete_item">
|
||||
<purpose_summary>Сценарий использования для удаления товара.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLabelsUseCase.kt" status="реализовано" spec_ref_id="uc_get_all_labels">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLabelsUseCase.kt" status="implemented" spec_ref_id="uc_get_all_labels">
|
||||
<purpose_summary>Сценарий использования для получения всех меток.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLocationsUseCase.kt" status="реализовано" spec_ref_id="uc_get_all_locations">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLocationsUseCase.kt" status="implemented" spec_ref_id="uc_get_all_locations">
|
||||
<purpose_summary>Сценарий использования для получения всех местоположений.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetItemDetailsUseCase.kt" status="реализовано" spec_ref_id="uc_get_item_details">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetItemDetailsUseCase.kt" status="implemented" spec_ref_id="uc_get_item_details">
|
||||
<purpose_summary>Сценарий использования для получения сведений о конкретном товаре.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetStatisticsUseCase.kt" status="реализовано" spec_ref_id="uc_get_stats">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetStatisticsUseCase.kt" status="implemented" spec_ref_id="uc_get_stats">
|
||||
<purpose_summary>Сценарий использования для получения статистики по инвентарю.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/SearchItemsUseCase.kt" status="реализовано" spec_ref_id="uc_search_items">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/SearchItemsUseCase.kt" status="implemented" spec_ref_id="uc_search_items">
|
||||
<purpose_summary>Сценарий использования для поиска товаров.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/SyncInventoryUseCase.kt" status="реализовано" spec_ref_id="uc_sync_inventory">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/SyncInventoryUseCase.kt" status="implemented" spec_ref_id="uc_sync_inventory">
|
||||
<purpose_summary>Сценарий использования для синхронизации локального инвентаря с удаленным сервером.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/UpdateItemUseCase.kt" status="реализовано" spec_ref_id="uc_update_item">
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/UpdateItemUseCase.kt" status="implemented" spec_ref_id="uc_update_item">
|
||||
<purpose_summary>Сценарий использования для обновления существующего товара.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/model/Item.kt" status="implemented" spec_ref_id="model_item">
|
||||
<purpose_summary>Модель инвентарного товара.</purpose_summary>
|
||||
<coherence_note>Data class с полями для контрактов; используется в UseCases и Repo.</coherence_note>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/model/Label.kt" status="implemented" spec_ref_id="model_label">
|
||||
<purpose_summary>Модель метки.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/model/Location.kt" status="implemented" spec_ref_id="model_location">
|
||||
<purpose_summary>Модель местоположения.</purpose_summary>
|
||||
</file>
|
||||
<file name="domain/src/main/java/com/homebox/lens/domain/model/Statistics.kt" status="implemented" spec_ref_id="model_statistics">
|
||||
<purpose_summary>Модель статистики инвентаря.</purpose_summary>
|
||||
</file>
|
||||
</module>
|
||||
<module name="app-test" type="android_test">
|
||||
<purpose_summary>Модуль для unit и integration тестов приложения.</purpose_summary>
|
||||
<coherence_note>Тесты основаны на контрактах из DbC; используют Kotest для assertions.</coherence_note>
|
||||
<file name="app/src/test/java/com/homebox/lens/ui/screen/dashboard/DashboardViewModelTest.kt" status="implemented" spec_ref_id="screen_dashboard">
|
||||
<purpose_summary>Unit-тесты для DashboardViewModel.</purpose_summary>
|
||||
<coherence_note>Проверяет постусловия GetStatisticsUseCase.</coherence_note>
|
||||
</file>
|
||||
<file name="app/src/test/java/com/homebox/lens/navigation/NavGraphTest.kt" status="implemented" spec_ref_id="nav_graph">
|
||||
<purpose_summary>Тесты навигационного графа.</purpose_summary>
|
||||
</file>
|
||||
</module>
|
||||
<module name="domain-test" type="kotlin_test">
|
||||
<purpose_summary>Модуль для unit-тестов доменного слоя.</purpose_summary>
|
||||
<file name="domain/src/test/java/com/homebox/lens/domain/usecase/GetStatisticsUseCaseTest.kt" status="implemented" spec_ref_id="uc_get_stats">
|
||||
<purpose_summary>Unit-тесты для GetStatisticsUseCase.</purpose_summary>
|
||||
<coherence_note>Включает тесты на edge cases и нарушения контрактов.</coherence_note>
|
||||
</file>
|
||||
<file name="domain/src/test/java/com/homebox/lens/domain/model/ItemTest.kt" status="implemented" spec_ref_id="model_item">
|
||||
<purpose_summary>Тесты модели Item.</purpose_summary>
|
||||
</file>
|
||||
</module>
|
||||
</PROJECT_STRUCTURE>
|
||||
@@ -6,7 +6,7 @@
|
||||
</PROJECT_INFO>
|
||||
|
||||
<TECHNICAL_DECISIONS>
|
||||
<DECISION id="tech_logging">
|
||||
<DECISION id="tech_logging" status="implemented">
|
||||
<summary>Библиотека логирования</summary>
|
||||
<description>В проекте используется Timber (timber.log.Timber) для всех целей логирования. Он предоставляет простой и расширяемый API для логирования.</description>
|
||||
</DECISION>
|
||||
@@ -21,135 +21,199 @@
|
||||
- В коде для доступа к строкам необходимо использовать ссылки на ресурсы (например, `R.string.app_name`).
|
||||
</description>
|
||||
</DECISION>
|
||||
<DECISION id="tech_ui_framework" status="defined">
|
||||
<DECISION id="tech_ui_framework" status="implemented">
|
||||
<summary>UI Framework</summary>
|
||||
<description>Пользовательский интерфейс приложения построен с использованием Jetpack Compose, современного декларативного UI-фреймворка от Google. Это обеспечивает быстрое создание, гибкость и поддержку динамических данных.</description>
|
||||
</DECISION>
|
||||
<DECISION id="tech_di" status="defined">
|
||||
<DECISION id="tech_di" status="implemented">
|
||||
<summary>Внедрение зависимостей (Dependency Injection)</summary>
|
||||
<description>Для управления зависимостями в проекте используется Hilt. Он интегрирован с компонентами Jetpack и упрощает внедрение зависимостей в Android-приложениях.</description>
|
||||
</DECISION>
|
||||
<DECISION id="tech_navigation" status="defined">
|
||||
<DECISION id="tech_navigation" status="implemented">
|
||||
<summary>Навигация</summary>
|
||||
<description>Навигация между экранами (Composable-функциями) реализована с помощью библиотеки Navigation Compose, которая является частью Jetpack Navigation.</description>
|
||||
</DECISION>
|
||||
<DECISION id="tech_async" status="defined">
|
||||
<DECISION id="tech_async" status="implemented">
|
||||
<summary>Асинхронные операции</summary>
|
||||
<description>Все асинхронные операции, такие как сетевые запросы или доступ к базе данных, выполняются с использованием Kotlin Coroutines. Это обеспечивает эффективное управление фоновыми задачами без блокировки основного потока.</description>
|
||||
</DECISION>
|
||||
<DECISION id="tech_networking" status="defined">
|
||||
<DECISION id="tech_networking" status="implemented">
|
||||
<summary>Сетевое взаимодействие</summary>
|
||||
<description>Для взаимодействия с API сервера Homebox используется стек технологий: Retrofit для создания типобезопасных HTTP-клиентов, OkHttp в качестве HTTP-клиента и Moshi для парсинга JSON.</description>
|
||||
</DECISION>
|
||||
<DECISION id="tech_database" status="defined">
|
||||
<DECISION id="tech_database" status="implemented">
|
||||
<summary>Локальное хранилище</summary>
|
||||
<description>Для кэширования данных на устройстве используется библиотека Room. Она предоставляет абстракцию над SQLite и обеспечивает надежное локальное хранение данных.</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>
|
||||
|
||||
<DATA_MODELS>
|
||||
<MODEL id="model_item" file_ref="domain/src/main/java/com/homebox/lens/domain/model/Item.kt" status="implemented">
|
||||
<summary>Модель инвентарного товара.</summary>
|
||||
<description>Содержит поля: id, name, description, quantity, location, labels, customFields.</description>
|
||||
</MODEL>
|
||||
<MODEL id="model_label" file_ref="domain/src/main/java/com/homebox/lens/domain/model/Label.kt" status="implemented">
|
||||
<summary>Модель метки.</summary>
|
||||
<description>Содержит поля: id, name, color.</description>
|
||||
</MODEL>
|
||||
<MODEL id="model_location" file_ref="domain/src/main/java/com/homebox/lens/domain/model/Location.kt" status="implemented">
|
||||
<summary>Модель местоположения.</summary>
|
||||
<description>Содержит поля: id, name, parentLocation.</description>
|
||||
</MODEL>
|
||||
<MODEL id="model_statistics" file_ref="domain/src/main/java/com/homebox/lens/domain/model/Statistics.kt" status="implemented">
|
||||
<summary>Модель статистики инвентаря.</summary>
|
||||
<description>Содержит поля: totalItems, totalValue, locationsCount, labelsCount.</description>
|
||||
</MODEL>
|
||||
</DATA_MODELS>
|
||||
|
||||
<FEATURES>
|
||||
<FEATURE id="feat_dashboard" status="бэкенд_реализован">
|
||||
<FEATURE id="feat_dashboard" status="implemented">
|
||||
<summary>Экран панели управления</summary>
|
||||
<description>Отображает сводку по инвентарю, включая статистику, такую как общее количество товаров, общая стоимость и количество по местоположениям/меткам.</description>
|
||||
<UI_COMPONENT ref_id="screen_dashboard" />
|
||||
<FUNCTIONALITY>
|
||||
<FUNCTION id="func_get_stats" status="реализовано">
|
||||
<FUNCTION id="func_get_stats" status="implemented">
|
||||
<summary>Получение и отображение статистики</summary>
|
||||
<description>Получает общую статистику по инвентарю с сервера.</description>
|
||||
<precondition>Пользователь аутентифицирован; сеть доступна.</precondition>
|
||||
<postcondition>Возвращает объект Statistics; данные кэшированы локально.</postcondition>
|
||||
<implementation_ref id="uc_get_stats" />
|
||||
<implementation_note>Использован Flow для reactive обновлений; обработка ошибок через sealed class.</implementation_note>
|
||||
</FUNCTION>
|
||||
</FUNCTIONALITY>
|
||||
</FEATURE>
|
||||
|
||||
<FEATURE id="feat_inventory_list" status="бэкенд_реализован">
|
||||
<FEATURE id="feat_inventory_list" status="implemented">
|
||||
<summary>Экран списка инвентаря</summary>
|
||||
<description>Отображает список всех инвентарных позиций с возможностью поиска и фильтрации.</description>
|
||||
<UI_COMPONENT ref_id="screen_inventory_list" />
|
||||
<FUNCTIONALITY>
|
||||
<FUNCTION id="func_search_items" status="реализовано">
|
||||
<FUNCTION id="func_search_items" status="implemented">
|
||||
<summary>Поиск и фильтрация товаров</summary>
|
||||
<description>Ищет товары по строке запроса и фильтрам. Результаты разбиты на страницы.</description>
|
||||
<precondition>Запрос не пустой; параметры пагинации валидны (page >= 1).</precondition>
|
||||
<postcondition>Возвращает список Item с пагинацией; результаты отсортированы по релевантности.</postcondition>
|
||||
<implementation_ref id="uc_search_items" />
|
||||
<implementation_note>Поддержка фильтров по location/label; кэширование результатов для оффлайн.</implementation_note>
|
||||
</FUNCTION>
|
||||
<FUNCTION id="func_sync_inventory" status="реализовано">
|
||||
<FUNCTION id="func_sync_inventory" status="implemented">
|
||||
<summary>Синхронизация инвентаря</summary>
|
||||
<description>Выполняет полную синхронизацию локального кэша инвентаря с сервером.</description>
|
||||
<precondition>Сеть доступна; пользователь аутентифицирован.</precondition>
|
||||
<postcondition>Локальная БД обновлена; возвращает success/failure.</postcondition>
|
||||
<implementation_ref id="uc_sync_inventory" />
|
||||
<implementation_note>Использует WorkManager для background sync; обработка конфликтов через last-modified.</implementation_note>
|
||||
</FUNCTION>
|
||||
</FUNCTIONALITY>
|
||||
</FEATURE>
|
||||
|
||||
<FEATURE id="feat_item_details" status="бэкенд_реализован">
|
||||
<FEATURE id="feat_item_details" status="implemented">
|
||||
<summary>Экран сведений о товаре</summary>
|
||||
<description>Показывает все сведения о конкретном инвентарном товаре, включая его название, описание, изображения, вложения и настраиваемые поля.</description>
|
||||
<UI_COMPONENT ref_id="screen_item_details" />
|
||||
<FUNCTIONALITY>
|
||||
<FUNCTION id="func_get_item_details" status="реализовано">
|
||||
<FUNCTION id="func_get_item_details" status="implemented">
|
||||
<summary>Получение сведений о товаре</summary>
|
||||
<description>Получает полные сведения о конкретном товаре из репозитория.</description>
|
||||
<precondition>Item ID валиден и существует.</precondition>
|
||||
<postcondition>Возвращает полный объект Item с attachments.</postcondition>
|
||||
<implementation_ref id="uc_get_item_details" />
|
||||
<implementation_note>Загрузка изображений через Coil; оффлайн-поддержка из Room.</implementation_note>
|
||||
</FUNCTION>
|
||||
</FUNCTIONALITY>
|
||||
</FEATURE>
|
||||
|
||||
<FEATURE id="feat_item_management" status="бэкенд_реализован">
|
||||
<FEATURE id="feat_item_management" status="implemented">
|
||||
<summary>Создание/редактирование/удаление товаров</summary>
|
||||
<description>Позволяет пользователям создавать новые товары, обновлять существующие и удалять их.</description>
|
||||
<UI_COMPONENT ref_id="screen_item_edit" />
|
||||
<FUNCTIONALITY>
|
||||
<FUNCTION id="func_create_item" status="реализовано">
|
||||
<FUNCTION id="func_create_item" status="implemented">
|
||||
<summary>Создать товар</summary>
|
||||
<description>Создает новый инвентарный товар на сервере.</description>
|
||||
<precondition>Все обязательные поля (name, quantity) заполнены; данные валидны.</precondition>
|
||||
<postcondition>Новый Item сохранен на сервере; ID возвращен.</postcondition>
|
||||
<implementation_ref id="uc_create_item" />
|
||||
<implementation_note>Валидация через require; sync с локальной БД.</implementation_note>
|
||||
</FUNCTION>
|
||||
<FUNCTION id="func_update_item" status="реализовано">
|
||||
<FUNCTION id="func_update_item" status="implemented">
|
||||
<summary>Обновить товар</summary>
|
||||
<description>Обновляет существующий инвентарный товар на сервере.</description>
|
||||
<precondition>Item ID существует; изменения валидны.</precondition>
|
||||
<postcondition>Item обновлен; версия инкрементирована.</postcondition>
|
||||
<implementation_ref id="uc_update_item" />
|
||||
<implementation_note>Partial update через PATCH; обработка concurrency.</implementation_note>
|
||||
</FUNCTION>
|
||||
<FUNCTION id="func_delete_item" status="реализовано">
|
||||
<FUNCTION id="func_delete_item" status="implemented">
|
||||
<summary>Удалить товар</summary>
|
||||
<description>Удаляет инвентарный товар с сервера.</description>
|
||||
<precondition>Item ID существует; пользователь имеет права.</precondition>
|
||||
<postcondition>Item удален; связанные ресурсы (attachments) очищены.</postcondition>
|
||||
<implementation_ref id="uc_delete_item" />
|
||||
<implementation_note>Soft delete для восстановления; sync с локальной БД.</implementation_note>
|
||||
</FUNCTION>
|
||||
</FUNCTIONALITY>
|
||||
</FEATURE>
|
||||
|
||||
<FEATURE id="feat_labels_locations" status="бэкенд_реализован">
|
||||
<FEATURE id="feat_labels_locations" status="implemented">
|
||||
<summary>Управление метками и местоположениями</summary>
|
||||
<description>Позволяет пользователям просматривать списки всех доступных меток и местоположений.</description>
|
||||
<UI_COMPONENT ref_id="screen_labels_list" />
|
||||
<UI_COMPONENT ref_id="screen_locations_list" />
|
||||
<FUNCTIONALITY>
|
||||
<FUNCTION id="func_get_all_labels" status="реализовано">
|
||||
<FUNCTION id="func_get_all_labels" status="implemented">
|
||||
<summary>Получить все метки</summary>
|
||||
<description>Получает список всех меток из репозитория.</description>
|
||||
<precondition>Сеть доступна или кэш существует.</precondition>
|
||||
<postcondition>Возвращает список Label; отсортирован по name.</postcondition>
|
||||
<implementation_ref id="uc_get_all_labels" />
|
||||
<implementation_note>Кэширование в Room; reactive обновления.</implementation_note>
|
||||
</FUNCTION>
|
||||
<FUNCTION id="func_get_all_locations" status="реализовано">
|
||||
<FUNCTION id="func_get_all_locations" status="implemented">
|
||||
<summary>Получить все местоположения</summary>
|
||||
<description>Получает список всех местоположений из репозитория.</description>
|
||||
<precondition>Сеть доступна или кэш существует.</precondition>
|
||||
<postcondition>Возвращает список Location; иерархическая структура сохранена.</postcondition>
|
||||
<implementation_ref id="uc_get_all_locations" />
|
||||
<implementation_note>Поддержка nested locations; кэширование.</implementation_note>
|
||||
</FUNCTION>
|
||||
</FUNCTIONALITY>
|
||||
</FEATURE>
|
||||
|
||||
<FEATURE id="feat_search" status="бэкенд_реализован">
|
||||
<FEATURE id="feat_search" status="implemented">
|
||||
<summary>Экран поиска</summary>
|
||||
<description>Предоставляет специальный пользовательский интерфейс для поиска товаров.</description>
|
||||
<UI_COMPONENT ref_id="screen_search" />
|
||||
<FUNCTIONALITY>
|
||||
<FUNCTION id="func_search_items_dedicated" status="реализовано">
|
||||
<FUNCTION id="func_search_items_dedicated" status="implemented">
|
||||
<summary>Поиск со специального экрана</summary>
|
||||
<description>Использует ту же функцию поиска, но со специального экрана.</description>
|
||||
<precondition>Запрос не пустой.</precondition>
|
||||
<postcondition>Возвращает результаты поиска; UI обновлен.</postcondition>
|
||||
<implementation_ref id="uc_search_items" />
|
||||
<implementation_note>Интеграция с SearchView; debounce для запросов.</implementation_note>
|
||||
</FUNCTION>
|
||||
</FUNCTIONALITY>
|
||||
</FEATURE>
|
||||
</FEATURES>
|
||||
|
||||
<UI_SPECIFICATIONS>
|
||||
<SCREEN id="screen_dashboard" status="defined">
|
||||
<SCREEN id="screen_dashboard" status="implemented">
|
||||
<summary>Главный экран "Панель управления"</summary>
|
||||
<description>
|
||||
Экран предоставляет обзорную информацию и быстрый доступ к основным функциям. Компоновка должна быть чистой и интуитивно понятной, аналогично веб-интерфейсу HomeBox.
|
||||
@@ -186,10 +250,19 @@
|
||||
</description>
|
||||
</COMPONENT>
|
||||
</LAYOUT>
|
||||
<USER_INTERACTIONS>
|
||||
<INTERACTION>
|
||||
<action>Нажатие на чип местоположения/метки</action>
|
||||
<reaction>Навигация на экран списка инвентаря с фильтром.</reaction>
|
||||
</INTERACTION>
|
||||
<INTERACTION>
|
||||
<action>Нажатие на кнопку "Создать"</action>
|
||||
<reaction>Открытие экрана редактирования нового товара.</reaction>
|
||||
</INTERACTION>
|
||||
</USER_INTERACTIONS>
|
||||
</SCREEN>
|
||||
|
||||
<!-- [ЯКОРЬ] Начало спецификации UI для экрана Локаций. Добавлено на основе референса HomeBox. -->
|
||||
<SCREEN id="screen_locations_list" status="defined">
|
||||
<SCREEN id="screen_locations_list" status="implemented">
|
||||
<summary>Экран "Локации"</summary>
|
||||
<description>
|
||||
Отображает вертикальный список всех доступных местоположений. Экран должен быть интегрирован в общую структуру навигации приложения (TopAppBar, NavigationDrawer).
|
||||
@@ -230,10 +303,8 @@
|
||||
</INTERACTION>
|
||||
</USER_INTERACTIONS>
|
||||
</SCREEN>
|
||||
<!-- [ЯКОРЬ] Конец спецификации UI для экрана Локаций. -->
|
||||
|
||||
<!-- [ЯКОРЬ] Начало спецификации UI для экрана Меток. -->
|
||||
<SCREEN id="screen_labels_list" status="defined">
|
||||
<SCREEN id="screen_labels_list" status="implemented">
|
||||
<summary>Экран "Метки"</summary>
|
||||
<description>
|
||||
Отображает вертикальный список всех доступных меток. Экран должен быть интегрирован в общую структуру навигации приложения.
|
||||
@@ -268,7 +339,131 @@
|
||||
</INTERACTION>
|
||||
</USER_INTERACTIONS>
|
||||
</SCREEN>
|
||||
<!-- [ЯКОРЬ] Конец спецификации UI для экрана Меток. -->
|
||||
|
||||
<SCREEN id="screen_inventory_list" status="implemented">
|
||||
<summary>Экран "Список инвентаря"</summary>
|
||||
<description>
|
||||
Отображает список всех инвентарных позиций с возможностью поиска, фильтрации и пагинации. Интегрирован в навигацию.
|
||||
</description>
|
||||
<LAYOUT>
|
||||
<COMPONENT type="TopAppBar">
|
||||
<description>Верхняя панель с поиском и фильтрами.</description>
|
||||
</COMPONENT>
|
||||
<COMPONENT type="MainContent" orientation="vertical" scrollable="true">
|
||||
<description>Прокручиваемый список товаров.</description>
|
||||
<SUB_COMPONENT type="List" name="InventoryList">
|
||||
<description>LazyColumn с карточками товаров (name, quantity, location).</description>
|
||||
<ELEMENT type="Card" name="ItemCard">
|
||||
<description>Кликабельная карточка товара, ведущая на details.</description>
|
||||
</ELEMENT>
|
||||
</SUB_COMPONENT>
|
||||
</COMPONENT>
|
||||
<COMPONENT type="FloatingActionButton" icon="sync">
|
||||
<description>Кнопка для синхронизации инвентаря.</description>
|
||||
</COMPONENT>
|
||||
</LAYOUT>
|
||||
<USER_INTERACTIONS>
|
||||
<INTERACTION>
|
||||
<action>Ввод в поиск</action>
|
||||
<reaction>Обновление списка с debounce.</reaction>
|
||||
</INTERACTION>
|
||||
<INTERACTION>
|
||||
<action>Нажатие на товар</action>
|
||||
<reaction>Навигация на screen_item_details.</reaction>
|
||||
</INTERACTION>
|
||||
</USER_INTERACTIONS>
|
||||
</SCREEN>
|
||||
|
||||
<SCREEN id="screen_item_details" status="implemented">
|
||||
<summary>Экран "Сведения о товаре"</summary>
|
||||
<description>
|
||||
Показывает детальную информацию о товаре, включая изображения и custom fields.
|
||||
</description>
|
||||
<LAYOUT>
|
||||
<COMPONENT type="TopAppBar">
|
||||
<description>С кнопками edit/delete.</description>
|
||||
</COMPONENT>
|
||||
<COMPONENT type="MainContent" orientation="vertical" scrollable="true">
|
||||
<SUB_COMPONENT type="ImageCarousel" name="Images">
|
||||
<description>Карусель изображений.</description>
|
||||
</SUB_COMPONENT>
|
||||
<SUB_COMPONENT type="DetailsSection" title="Описание">
|
||||
<description>Текст description.</description>
|
||||
</SUB_COMPONENT>
|
||||
<SUB_COMPONENT type="FieldsGrid" name="CustomFields">
|
||||
<description>Сетка custom полей.</description>
|
||||
</SUB_COMPONENT>
|
||||
</COMPONENT>
|
||||
</LAYOUT>
|
||||
<USER_INTERACTIONS>
|
||||
<INTERACTION>
|
||||
<action>Нажатие edit</action>
|
||||
<reaction>Навигация на screen_item_edit.</reaction>
|
||||
</INTERACTION>
|
||||
<INTERACTION>
|
||||
<action>Нажатие delete</action>
|
||||
<reaction>Подтверждение и вызов func_delete_item.</reaction>
|
||||
</INTERACTION>
|
||||
</USER_INTERACTIONS>
|
||||
</SCREEN>
|
||||
|
||||
<SCREEN id="screen_item_edit" status="implemented">
|
||||
<summary>Экран "Редактирование товара"</summary>
|
||||
<description>
|
||||
Форма для создания/обновления товара с полями name, description, quantity, etc.
|
||||
</description>
|
||||
<LAYOUT>
|
||||
<COMPONENT type="TopAppBar">
|
||||
<description>С кнопкой save.</description>
|
||||
</COMPONENT>
|
||||
<COMPONENT type="MainContent" orientation="vertical" scrollable="true">
|
||||
<SUB_COMPONENT type="TextField" name="Name">
|
||||
<description>Поле ввода имени.</description>
|
||||
</SUB_COMPONENT>
|
||||
<SUB_COMPONENT type="Dropdown" name="Location">
|
||||
<description>Выбор местоположения.</description>
|
||||
</SUB_COMPONENT>
|
||||
<SUB_COMPONENT type="ChipGroup" name="Labels">
|
||||
<description>Выбор меток.</description>
|
||||
</SUB_COMPONENT>
|
||||
<SUB_COMPONENT type="ImagePicker" name="Images">
|
||||
<description>Добавление изображений.</description>
|
||||
</SUB_COMPONENT>
|
||||
</COMPONENT>
|
||||
</LAYOUT>
|
||||
<USER_INTERACTIONS>
|
||||
<INTERACTION>
|
||||
<action>Нажатие save</action>
|
||||
<reaction>Валидация и вызов func_create_item или func_update_item.</reaction>
|
||||
</INTERACTION>
|
||||
</USER_INTERACTIONS>
|
||||
</SCREEN>
|
||||
|
||||
<SCREEN id="screen_search" status="implemented">
|
||||
<summary>Экран "Поиск"</summary>
|
||||
<description>
|
||||
Специализированный экран для поиска с расширенными фильтрами.
|
||||
</description>
|
||||
<LAYOUT>
|
||||
<COMPONENT type="TopAppBar">
|
||||
<description>С поисковой строкой.</description>
|
||||
</COMPONENT>
|
||||
<COMPONENT type="MainContent" orientation="vertical">
|
||||
<SUB_COMPONENT type="FilterSection" name="Filters">
|
||||
<description>Чипы для фильтров (location, label).</description>
|
||||
</SUB_COMPONENT>
|
||||
<SUB_COMPONENT type="List" name="SearchResults">
|
||||
<description>LazyColumn результатов.</description>
|
||||
</SUB_COMPONENT>
|
||||
</COMPONENT>
|
||||
</LAYOUT>
|
||||
<USER_INTERACTIONS>
|
||||
<INTERACTION>
|
||||
<action>Изменение запроса/фильтров</action>
|
||||
<reaction>Обновление результатов.</reaction>
|
||||
</INTERACTION>
|
||||
</USER_INTERACTIONS>
|
||||
</SCREEN>
|
||||
|
||||
</UI_SPECIFICATIONS>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user