The purpose of this application is to show a banking application that allows user registration, user login, bank information: balance, list of movements made and detail of the movement.
When opening the app, it will show a Login screen with the option to enter user credentials or register a new account. If creating a new account is selected, a form will appear to be filled with user's information and then he/she must include a picture of their ID to submit. After registration or login process is finished, a Home screen will be shown with the account balance and its movements. When selecting one of them, details will be shown on a new screen.
- When opening the app, a Login screen will be shown.
- If user chooses to enter his/her credentials, a network call to
Firebase
will be done and if it succeeds, app will redirect to Home screen. - In case user has chosen Registration option, a Form screen will appear where he/she must complete with their personal information.
- If all fields are valid, a new screen will open indicating that an ID photo must be included. Camera permissions will be asked (if they are needed), and then camera will be available to be used.
- If user selects to register, a communication with
Firebase
is stablished and will create a new user onFirestore
- Either login or registration succeeds, a Home screen will be shown with the account balance and the movements ordered by date.
- If account is new and no movements were done, and empty state will be shown.
- If user wants, he/she has the opportunity to Log out with an action in the top bar.
- At Home screen, movements have the possibility to be clicked, thus, the app will redirect to a details screen showing more information.
Project is organized taking care of Clean Architecture organization through Presentation
, Domain
and Data
layers:
- Presentation: This layer will respect MVI pattern, where each screen has an
Intent
and aState
.StateFlows
were implemented with the purpose that screens react when data insideViewModel
changes and the purpose ofSharedFlows
are to handle one shot events such asToast
error messages and triggering navigation. Shimmer effect was implemented using an external library (Shimmer for Jetpack Compose & Compose Multiplatform) - Domain: The only purpose of this layer is to map network models to
View
ones. Moreover, they are in charge to communicate between the different repositories. For example, take a look toRegisterUseCase
. - Data: This layer will include
Repositories
andRemoteDataSources
where the communication withFirebase
is stablished.Repositories
seem to do no work here, but their purpose will make sense in the future when saving data into Cache or DB. At this time, we are not going to implement them.
Email: [email protected]
Password: Pass123!