Pocket Planner is designed using a modular architecture, following Clean Architecture principles and the MVI pattern. Below is a detailed breakdown of the file structure:
─ presentation
├── navigation
│ └── AppNavigation.kt
├── screen
│ ├── categorymonthdetail
│ │ ├── content
│ │ │ └── CategoryMonthDetailContent.kt
│ │ └── observer
│ │ └── CategoryMonthDetailObserver.kt
│ ├── createexpense
│ │ ├── content
│ │ │ └── CreateExpenseContent.kt
│ │ └── observer
│ │ └── CreateExpenseObserver.kt
│ └── home
│ ├── content
│ │ ├── HomeBodyContent.kt
│ │ └── HomeHeaderContent.kt
│ └── observer
│ └── HomeObserver.kt
└── viewmodel
├── createincome
│ └── CreateIncomeViewModel.kt
├── editexpense
│ └── EditExpenseViewModel.kt
└── months
├── MonthsScreenState.kt
└── MonthsViewModel.kt
─ navigation
├── di
│ ├── AppModule.kt
│ └── PlatformModule.kt
└── impl
└── AppNavigationImpl.kt
─ theme
├── Color.kt
├── Dimen.kt
├── Shape.kt
└── Type.kt
─ core
├── mapper
│ └── ResultMapper.kt
├── network
│ └── ResponseResult.kt
├── navigation
│ └── LocalNavController.kt
└── utils
├── Extensions.kt
└── NoRippleInteractionSource.kt
─ data
├── database
│ ├── expense
│ │ └── ExpenseFunctions.kt
│ ├── income
│ │ └── IncomeFunctions.kt
│ └── month
│ └── MonthFunctions.kt
├── repository
│ └── FinanceRepositoryImpl.kt
└── sqldelight
├── expense
│ └── Expense.sq
└── month
└── Month.sq
─ domain
├── model
│ ├── FinanceModel.kt
│ ├── MonthModel.kt
│ └── FinanceLocalDate.kt
├── repository
│ └── FinanceRepository.kt
└── usecase
├── CreateExpenseUseCase.kt
└── GetExpenseUseCase.kt
─ components
├── alertdialog
│ └── AlertDialog.kt
├── button
│ └── Button.kt
├── chart
│ ├── FinanceBarChart.kt
│ └── FinanceLineChart.kt
├── textfield
└── AmountOutlineTextField.kt
─ androidMain
├── kotlin
│ └── com
│ └── daviekim
│ └── myfinance
│ └── app
│ └── MainActivity.kt
└── res
├── mipmap-anydpi-v26
│ └── ic_launcher.xml
└── values
└── strings.xml
─ test
├── data
│ ├── repository
│ │ ├── database
│ │ │ └── FakeDatabaseFinanceDataSource.kt
│ │ └── impl
│ │ └── FinanceRepositoryImplTest.kt
│ └── impl
│ └── FakeFinanceRepositoryImpl.kt
├── domain
│ └── usecase
│ ├── GetExpenseUseCaseTest.kt
│ ├── GetFinanceUseCaseTest.kt
│ └── GetMonthsUseCaseTest.kt
├── mock
│ └── DatabaseFinanceDataSourceMock.kt
└── presentation
└── viewmodel
├── createexpense
│ └── CreateExpenseViewModelTest.kt
├── home
│ └── HomeViewModelTest.kt
└── months
└── MonthsViewModelTest.kt
During the development of Pocket Planner, the following technologies and tools were utilized:
Some of the major challenges encountered during development were:
The development of Pocket Planner led to several significant achievements: