feat: Scaffold UI screens and update project specification
- Create stub files for all UI screens defined in the tech spec (InventoryList, ItemDetails, ItemEdit, LabelsList, LocationsList, Search). - Add corresponding ViewModels for each new screen. - Update `tech_spec/project_structure.txt` to include the new files and mark them as 'stub'. - Update `tech_spec/tech_spec.txt` to reflect the current implementation status, changing feature statuses to 'in_progress'. - Add the undocumented `SearchScreen` to the project specification. - Add `*.hprof` files to `.gitignore` to exclude memory dumps from version control.
This commit is contained in:
36
.gitignore
vendored
36
.gitignore
vendored
@@ -1,34 +1,2 @@
|
|||||||
# Gradle
|
# Hprof files
|
||||||
.gradle/
|
*.hprof
|
||||||
build/
|
|
||||||
!gradle/wrapper/gradle-wrapper.jar
|
|
||||||
|
|
||||||
# Local configuration
|
|
||||||
local.properties
|
|
||||||
|
|
||||||
# IDE files
|
|
||||||
.idea/
|
|
||||||
*.iml
|
|
||||||
*.ipr
|
|
||||||
*.iws
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Keystore files
|
|
||||||
*.jks
|
|
||||||
*.keystore
|
|
||||||
|
|
||||||
# Google Services
|
|
||||||
app/google-services.json
|
|
||||||
|
|
||||||
# Captures
|
|
||||||
captures/
|
|
||||||
*.apk
|
|
||||||
*.aab
|
|
||||||
output.json
|
|
||||||
|
|
||||||
# Log files
|
|
||||||
*.log
|
|
||||||
|
|
||||||
# Gemini files
|
|
||||||
GEMINI.md
|
|
||||||
tech_spec/
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.inventorylist
|
||||||
|
// [FILE] InventoryListScreen.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.inventorylist
|
||||||
|
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
|
// [ENTRYPOINT]
|
||||||
|
@Composable
|
||||||
|
fun InventoryListScreen() {
|
||||||
|
// [ACTION]
|
||||||
|
Text(text = "Inventory List Screen")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true)
|
||||||
|
@Composable
|
||||||
|
fun InventoryListScreenPreview() {
|
||||||
|
InventoryListScreen()
|
||||||
|
}
|
||||||
|
// [END_FILE_InventoryListScreen.kt]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.inventorylist
|
||||||
|
// [FILE] InventoryListViewModel.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.inventorylist
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
// [VIEWMODEL]
|
||||||
|
@HiltViewModel
|
||||||
|
class InventoryListViewModel @Inject constructor() : ViewModel() {
|
||||||
|
// [STATE]
|
||||||
|
// TODO: Implement UI state
|
||||||
|
}
|
||||||
|
// [END_FILE_InventoryListViewModel.kt]
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.itemdetails
|
||||||
|
// [FILE] ItemDetailsScreen.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.itemdetails
|
||||||
|
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
|
// [ENTRYPOINT]
|
||||||
|
@Composable
|
||||||
|
fun ItemDetailsScreen() {
|
||||||
|
// [ACTION]
|
||||||
|
Text(text = "Item Details Screen")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true)
|
||||||
|
@Composable
|
||||||
|
fun ItemDetailsScreenPreview() {
|
||||||
|
ItemDetailsScreen()
|
||||||
|
}
|
||||||
|
// [END_FILE_ItemDetailsScreen.kt]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.itemdetails
|
||||||
|
// [FILE] ItemDetailsViewModel.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.itemdetails
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
// [VIEWMODEL]
|
||||||
|
@HiltViewModel
|
||||||
|
class ItemDetailsViewModel @Inject constructor() : ViewModel() {
|
||||||
|
// [STATE]
|
||||||
|
// TODO: Implement UI state
|
||||||
|
}
|
||||||
|
// [END_FILE_ItemDetailsViewModel.kt]
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.itemedit
|
||||||
|
// [FILE] ItemEditScreen.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.itemedit
|
||||||
|
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
|
// [ENTRYPOINT]
|
||||||
|
@Composable
|
||||||
|
fun ItemEditScreen() {
|
||||||
|
// [ACTION]
|
||||||
|
Text(text = "Item Edit Screen")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true)
|
||||||
|
@Composable
|
||||||
|
fun ItemEditScreenPreview() {
|
||||||
|
ItemEditScreen()
|
||||||
|
}
|
||||||
|
// [END_FILE_ItemEditScreen.kt]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.itemedit
|
||||||
|
// [FILE] ItemEditViewModel.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.itemedit
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
// [VIEWMODEL]
|
||||||
|
@HiltViewModel
|
||||||
|
class ItemEditViewModel @Inject constructor() : ViewModel() {
|
||||||
|
// [STATE]
|
||||||
|
// TODO: Implement UI state
|
||||||
|
}
|
||||||
|
// [END_FILE_ItemEditViewModel.kt]
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.labelslist
|
||||||
|
// [FILE] LabelsListScreen.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.labelslist
|
||||||
|
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
|
// [ENTRYPOINT]
|
||||||
|
@Composable
|
||||||
|
fun LabelsListScreen() {
|
||||||
|
// [ACTION]
|
||||||
|
Text(text = "Labels List Screen")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true)
|
||||||
|
@Composable
|
||||||
|
fun LabelsListScreenPreview() {
|
||||||
|
LabelsListScreen()
|
||||||
|
}
|
||||||
|
// [END_FILE_LabelsListScreen.kt]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.labelslist
|
||||||
|
// [FILE] LabelsListViewModel.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.labelslist
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
// [VIEWMODEL]
|
||||||
|
@HiltViewModel
|
||||||
|
class LabelsListViewModel @Inject constructor() : ViewModel() {
|
||||||
|
// [STATE]
|
||||||
|
// TODO: Implement UI state
|
||||||
|
}
|
||||||
|
// [END_FILE_LabelsListViewModel.kt]
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.locationslist
|
||||||
|
// [FILE] LocationsListScreen.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.locationslist
|
||||||
|
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
|
// [ENTRYPOINT]
|
||||||
|
@Composable
|
||||||
|
fun LocationsListScreen() {
|
||||||
|
// [ACTION]
|
||||||
|
Text(text = "Locations List Screen")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true)
|
||||||
|
@Composable
|
||||||
|
fun LocationsListScreenPreview() {
|
||||||
|
LocationsListScreen()
|
||||||
|
}
|
||||||
|
// [END_FILE_LocationsListScreen.kt]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.locationslist
|
||||||
|
// [FILE] LocationsListViewModel.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.locationslist
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
// [VIEWMODEL]
|
||||||
|
@HiltViewModel
|
||||||
|
class LocationsListViewModel @Inject constructor() : ViewModel() {
|
||||||
|
// [STATE]
|
||||||
|
// TODO: Implement UI state
|
||||||
|
}
|
||||||
|
// [END_FILE_LocationsListViewModel.kt]
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.search
|
||||||
|
// [FILE] SearchScreen.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.search
|
||||||
|
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
|
// [ENTRYPOINT]
|
||||||
|
@Composable
|
||||||
|
fun SearchScreen() {
|
||||||
|
// [ACTION]
|
||||||
|
Text(text = "Search Screen")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true)
|
||||||
|
@Composable
|
||||||
|
fun SearchScreenPreview() {
|
||||||
|
SearchScreen()
|
||||||
|
}
|
||||||
|
// [END_FILE_SearchScreen.kt]
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// [PACKAGE] com.homebox.lens.ui.screen.search
|
||||||
|
// [FILE] SearchViewModel.kt
|
||||||
|
|
||||||
|
package com.homebox.lens.ui.screen.search
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
// [VIEWMODEL]
|
||||||
|
@HiltViewModel
|
||||||
|
class SearchViewModel @Inject constructor() : ViewModel() {
|
||||||
|
// [STATE]
|
||||||
|
// TODO: Implement UI state
|
||||||
|
}
|
||||||
|
// [END_FILE_SearchViewModel.kt]
|
||||||
4315
tech_spec/home_box_api.json
Normal file
4315
tech_spec/home_box_api.json
Normal file
File diff suppressed because it is too large
Load Diff
117
tech_spec/project_structure.txt
Normal file
117
tech_spec/project_structure.txt
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PROJECT_STRUCTURE>
|
||||||
|
<module name="app" type="android_app">
|
||||||
|
<purpose_summary>Main application module, contains UI and application entry points.</purpose_summary>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/MainActivity.kt" status="implemented" ref_id="entry_point">
|
||||||
|
<purpose_summary>The main and only Activity of the application, hosts the NavHost.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/MainApplication.kt" status="implemented" ref_id="app_context">
|
||||||
|
<purpose_summary>Application class, used for Hilt dependency injection setup.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/di/AppModule.kt" status="implemented" ref_id="di_app">
|
||||||
|
<purpose_summary>Hilt module for application-wide dependencies.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/navigation/NavGraph.kt" status="implemented" ref_id="nav_graph">
|
||||||
|
<purpose_summary>Defines the navigation graph for the entire application using Jetpack Compose Navigation.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/navigation/Screen.kt" status="implemented" ref_id="nav_screen">
|
||||||
|
<purpose_summary>Defines the routes for all screens in the app as a sealed class.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" status="stub" spec_ref_id="screen_dashboard">
|
||||||
|
<purpose_summary>UI for the Dashboard screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardViewModel.kt" status="stub" spec_ref_id="screen_dashboard">
|
||||||
|
<purpose_summary>ViewModel for the Dashboard screen, handles business logic.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListScreen.kt" status="stub" spec_ref_id="screen_inventory_list">
|
||||||
|
<purpose_summary>UI for the Inventory List screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListViewModel.kt" status="stub" spec_ref_id="screen_inventory_list">
|
||||||
|
<purpose_summary>ViewModel for the Inventory List screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsScreen.kt" status="stub" spec_ref_id="screen_item_details">
|
||||||
|
<purpose_summary>UI for the Item Details screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsViewModel.kt" status="stub" spec_ref_id="screen_item_details">
|
||||||
|
<purpose_summary>ViewModel for the Item Details screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditScreen.kt" status="stub" spec_ref_id="screen_item_edit">
|
||||||
|
<purpose_summary>UI for the Item Edit screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditViewModel.kt" status="stub" spec_ref_id="screen_item_edit">
|
||||||
|
<purpose_summary>ViewModel for the Item Edit screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" status="stub" spec_ref_id="screen_labels_list">
|
||||||
|
<purpose_summary>UI for the Labels List screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListViewModel.kt" status="stub" spec_ref_id="screen_labels_list">
|
||||||
|
<purpose_summary>ViewModel for the Labels List screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" status="stub" spec_ref_id="screen_locations_list">
|
||||||
|
<purpose_summary>UI for the Locations List screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListViewModel.kt" status="stub" spec_ref_id="screen_locations_list">
|
||||||
|
<purpose_summary>ViewModel for the Locations List screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/search/SearchScreen.kt" status="stub" spec_ref_id="screen_search">
|
||||||
|
<purpose_summary>UI for the Search screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="app/src/main/java/com/homebox/lens/ui/screen/search/SearchViewModel.kt" status="stub" spec_ref_id="screen_search">
|
||||||
|
<purpose_summary>ViewModel for the Search screen.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
</module>
|
||||||
|
<module name="data" type="android_library">
|
||||||
|
<purpose_summary>Data layer, responsible for data sources (network, local DB) and repository implementations.</purpose_summary>
|
||||||
|
<file name="data/src/main/java/com/homebox/lens/data/api/HomeboxApiService.kt" status="implemented" ref_id="api_service">
|
||||||
|
<purpose_summary>Retrofit service interface for the Homebox API.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="data/src/main/java/com/homebox/lens/data/db/HomeboxDatabase.kt" status="implemented" ref_id="database">
|
||||||
|
<purpose_summary>Room database definition for local caching.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="data/src/main/java/com/homebox/lens/data/repository/ItemRepositoryImpl.kt" status="implemented" ref_id="repo_impl">
|
||||||
|
<purpose_summary>Implementation of the ItemRepository, coordinating data from API and local DB.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="data/src/main/java/com/homebox/lens/data/di/ApiModule.kt" status="implemented" ref_id="di_api">
|
||||||
|
<purpose_summary>Hilt module for providing network-related dependencies (Retrofit, OkHttp).</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="data/src/main/java/com/homebox/lens/data/di/DatabaseModule.kt" status="implemented" ref_id="di_db">
|
||||||
|
<purpose_summary>Hilt module for providing database-related dependencies (Room DB, DAOs).</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="data/src/main/java/com/homebox/lens/data/di/RepositoryModule.kt" status="implemented" ref_id="di_repo">
|
||||||
|
<purpose_summary>Hilt module for binding repository interfaces to their implementations.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
</module>
|
||||||
|
<module name="domain" type="kotlin_jvm_library">
|
||||||
|
<purpose_summary>Domain layer, contains business logic, use cases, and repository interfaces. Pure Kotlin module.</purpose_summary>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt" status="implemented" ref_id="repo_interface">
|
||||||
|
<purpose_summary>Interface defining the contract for data operations related to items.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/CreateItemUseCase.kt" status="implemented" spec_ref_id="uc_create_item">
|
||||||
|
<purpose_summary>Use case for creating a new item.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteItemUseCase.kt" status="implemented" spec_ref_id="uc_delete_item">
|
||||||
|
<purpose_summary>Use case for deleting an item.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLabelsUseCase.kt" status="implemented" spec_ref_id="uc_get_all_labels">
|
||||||
|
<purpose_summary>Use case for getting all labels.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLocationsUseCase.kt" status="implemented" spec_ref_id="uc_get_all_locations">
|
||||||
|
<purpose_summary>Use case for getting all locations.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetItemDetailsUseCase.kt" status="implemented" spec_ref_id="uc_get_item_details">
|
||||||
|
<purpose_summary>Use case for getting the details of a single item.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/GetStatisticsUseCase.kt" status="implemented" spec_ref_id="uc_get_stats">
|
||||||
|
<purpose_summary>Use case for getting inventory statistics.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/SearchItemsUseCase.kt" status="implemented" spec_ref_id="uc_search_items">
|
||||||
|
<purpose_summary>Use case for searching items.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/SyncInventoryUseCase.kt" status="implemented" spec_ref_id="uc_sync_inventory">
|
||||||
|
<purpose_summary>Use case for syncing the local inventory with the remote server.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/UpdateItemUseCase.kt" status="implemented" spec_ref_id="uc_update_item">
|
||||||
|
<purpose_summary>Use case for updating an existing item.</purpose_summary>
|
||||||
|
</file>
|
||||||
|
</module>
|
||||||
|
</PROJECT_STRUCTURE>
|
||||||
130
tech_spec/tech_spec.txt
Normal file
130
tech_spec/tech_spec.txt
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<PROJECT_SPECIFICATION>
|
||||||
|
<PROJECT_INFO>
|
||||||
|
<name>Homebox Lens</name>
|
||||||
|
<description>An Android client for the Homebox inventory management system. It allows users to manage their inventory by interacting with a Homebox server instance.</description>
|
||||||
|
</PROJECT_INFO>
|
||||||
|
|
||||||
|
<FEATURES>
|
||||||
|
<FEATURE id="feat_dashboard" status="in_progress">
|
||||||
|
<summary>Dashboard Screen</summary>
|
||||||
|
<description>Displays a summary of the inventory, including statistics like total items, total value, and counts by location/label.</description>
|
||||||
|
<UI_COMPONENT ref_id="screen_dashboard" />
|
||||||
|
<FUNCTIONALITY>
|
||||||
|
<FUNCTION id="func_get_stats" status="implemented">
|
||||||
|
<summary>Fetch and display statistics</summary>
|
||||||
|
<description>Retrieves overall inventory statistics from the server.</description>
|
||||||
|
<implementation_ref id="uc_get_stats" />
|
||||||
|
</FUNCTION>
|
||||||
|
</FUNCTIONALITY>
|
||||||
|
</FEATURE>
|
||||||
|
|
||||||
|
<FEATURE id="feat_inventory_list" status="in_progress">
|
||||||
|
<summary>Inventory List Screen</summary>
|
||||||
|
<description>Displays a searchable and filterable list of all inventory items.</description>
|
||||||
|
<UI_COMPONENT ref_id="screen_inventory_list" />
|
||||||
|
<FUNCTIONALITY>
|
||||||
|
<FUNCTION id="func_search_items" status="implemented">
|
||||||
|
<summary>Search and filter items</summary>
|
||||||
|
<description>Searches for items based on a query string and filters. The results are paginated.</description>
|
||||||
|
<implementation_ref id="uc_search_items" />
|
||||||
|
</FUNCTION>
|
||||||
|
<FUNCTION id="func_sync_inventory" status="implemented">
|
||||||
|
<summary>Sync Inventory</summary>
|
||||||
|
<description>Performs a full synchronization of the local inventory cache with the server.</description>
|
||||||
|
<implementation_ref id="uc_sync_inventory" />
|
||||||
|
</FUNCTION>
|
||||||
|
</FUNCTIONALITY>
|
||||||
|
</FEATURE>
|
||||||
|
|
||||||
|
<FEATURE id="feat_item_details" status="in_progress">
|
||||||
|
<summary>Item Details Screen</summary>
|
||||||
|
<description>Shows all details for a single inventory item, including its name, description, images, attachments, and custom fields.</description>
|
||||||
|
<UI_COMPONENT ref_id="screen_item_details" />
|
||||||
|
<FUNCTIONALITY>
|
||||||
|
<FUNCTION id="func_get_item_details" status="implemented">
|
||||||
|
<summary>Fetch Item Details</summary>
|
||||||
|
<description>Retrieves the full details for a specific item from the repository.</description>
|
||||||
|
<implementation_ref id="uc_get_item_details" />
|
||||||
|
</FUNCTION>
|
||||||
|
</FUNCTIONALITY>
|
||||||
|
</FEATURE>
|
||||||
|
|
||||||
|
<FEATURE id="feat_item_management" status="in_progress">
|
||||||
|
<summary>Create/Edit/Delete Items</summary>
|
||||||
|
<description>Allows users to create new items, update existing ones, and delete them.</description>
|
||||||
|
<UI_COMPONENT ref_id="screen_item_edit" />
|
||||||
|
<FUNCTIONALITY>
|
||||||
|
<FUNCTION id="func_create_item" status="implemented">
|
||||||
|
<summary>Create Item</summary>
|
||||||
|
<description>Creates a new inventory item on the server.</description>
|
||||||
|
<implementation_ref id="uc_create_item" />
|
||||||
|
</FUNCTION>
|
||||||
|
<FUNCTION id="func_update_item" status="implemented">
|
||||||
|
<summary>Update Item</summary>
|
||||||
|
<description>Updates an existing inventory item on the server.</description>
|
||||||
|
<implementation_ref id="uc_update_item" />
|
||||||
|
</FUNCTION>
|
||||||
|
<FUNCTION id="func_delete_item" status="implemented">
|
||||||
|
<summary>Delete Item</summary>
|
||||||
|
<description>Deletes an inventory item from the server.</description>
|
||||||
|
<implementation_ref id="uc_delete_item" />
|
||||||
|
</FUNCTION>
|
||||||
|
</FUNCTIONALITY>
|
||||||
|
</FEATURE>
|
||||||
|
|
||||||
|
<FEATURE id="feat_labels_locations" status="in_progress">
|
||||||
|
<summary>Manage Labels and Locations</summary>
|
||||||
|
<description>Allows users to view lists of all available labels and locations.</description>
|
||||||
|
<UI_COMPONENT ref_id="screen_labels_list" />
|
||||||
|
<UI_COMPONENT ref_id="screen_locations_list" />
|
||||||
|
<FUNCTIONALITY>
|
||||||
|
<FUNCTION id="func_get_all_labels" status="implemented">
|
||||||
|
<summary>Get All Labels</summary>
|
||||||
|
<description>Retrieves a list of all labels from the repository.</description>
|
||||||
|
<implementation_ref id="uc_get_all_labels" />
|
||||||
|
</FUNCTION>
|
||||||
|
<FUNCTION id="func_get_all_locations" status="implemented">
|
||||||
|
<summary>Get All Locations</summary>
|
||||||
|
<description>Retrieves a list of all locations from the repository.</description>
|
||||||
|
<implementation_ref id="uc_get_all_locations" />
|
||||||
|
</FUNCTION>
|
||||||
|
</FUNCTIONALITY>
|
||||||
|
</FEATURE>
|
||||||
|
|
||||||
|
<FEATURE id="feat_search" status="in_progress">
|
||||||
|
<summary>Search Screen</summary>
|
||||||
|
<description>Provides a dedicated UI for searching items.</description>
|
||||||
|
<UI_COMPONENT ref_id="screen_search" />
|
||||||
|
<FUNCTIONALITY>
|
||||||
|
<FUNCTION id="func_search_items_dedicated" status="implemented">
|
||||||
|
<summary>Search from dedicated screen</summary>
|
||||||
|
<description>Uses the same search functionality but from a dedicated screen.</description>
|
||||||
|
<implementation_ref id="uc_search_items" />
|
||||||
|
</FUNCTION>
|
||||||
|
</FUNCTIONALITY>
|
||||||
|
</FEATURE>
|
||||||
|
</FEATURES>
|
||||||
|
|
||||||
|
<IMPLEMENTATION_MAP>
|
||||||
|
<!-- Use Cases -->
|
||||||
|
<USE_CASE id="uc_get_stats" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/GetStatisticsUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_search_items" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/SearchItemsUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_sync_inventory" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/SyncInventoryUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_get_item_details" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/GetItemDetailsUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_create_item" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/CreateItemUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_update_item" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/UpdateItemUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_delete_item" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteItemUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_get_all_labels" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLabelsUseCase.kt" />
|
||||||
|
<USE_CASE id="uc_get_all_locations" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLocationsUseCase.kt" />
|
||||||
|
|
||||||
|
<!-- UI Screens -->
|
||||||
|
<UI_SCREEN id="screen_dashboard" file_ref="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" />
|
||||||
|
<UI_SCREEN id="screen_inventory_list" file_ref="app/src/main/java/com/homebox/lens/ui/screen/inventorylist/InventoryListScreen.kt" />
|
||||||
|
<UI_SCREEN id="screen_item_details" file_ref="app/src/main/java/com/homebox/lens/ui/screen/itemdetails/ItemDetailsScreen.kt" />
|
||||||
|
<UI_SCREEN id="screen_item_edit" file_ref="app/src/main/java/com/homebox/lens/ui/screen/itemedit/ItemEditScreen.kt" />
|
||||||
|
<UI_SCREEN id="screen_labels_list" file_ref="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" />
|
||||||
|
<UI_SCREEN id="screen_locations_list" file_ref="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" />
|
||||||
|
<UI_SCREEN id="screen_search" file_ref="app/src/main/java/com/homebox/lens/ui/screen/search/SearchScreen.kt" />
|
||||||
|
</IMPLEMENTATION_MAP>
|
||||||
|
</PROJECT_SPECIFICATION>
|
||||||
Reference in New Issue
Block a user