The Wallet is a full-stack application that gives people the opportunity to control their money flow by introducing and keeping track of their expenses and incomes.
Money is an integral part of the life of almost every person. After the research and gaining personal experience, I realized that saving money is one of the hardest skills. In addition to that, it is a well-known fact, that not all buying decisions are made consciously, some of them are made because of our mood or temporary desire for a specific thing. Something that can mitigate the consequences of the external influence of purchasing decisions and prevent unnecessary and unplanned spending is keeping track of your expenses and incomes. The goal was to create an application, that would be simple in use, yet satisfy the user’s needs and provide the necessary functionality for budget planning and tracking.
- Android Jetpack Compose
- Java Spring
- MySQL
- REST API
The Wallet is a full-stack application that is based on the client-server architecture. The diagram below demonstrates the high-level architecture of the system.
This architecture fully meets the application requirements and will provide efficient operation. Each component is isolated and independent from the other, giving the system the necessary level of maintainability. All the system components have their responsibilities.
- User can register and login to the application
- User can see the list of all transactions he entered into the application, as well as data about his total income, expense and budget
- User can filter transactions by time and sort them by different parameters (location, date, wallet, category, etc.)
- User can add the records to the application
- User can see, edit and delete his records
- User can generate the in app reports about his money flow
- Wallet should be maintainable and scalable
- Wallet should be responsive and secure the data
- The limitation of mobile devices resources and hindered vertical scalability were also taken into the consideration during the comparison of different possible solutions.
- The separation of concerns principle is crucial since the processes of your application are under the control of the Operating System and due to the resource’s limitation Android OS may kill some of the processes for optimization.
- UI should contain as less logic, as possible and should be driven by the data. Thereby, the interface will be much more responsive, and the user experience will be improved.
The architectural pattern for the server-side part of the Wallet application plays a significant role in the application performance and fulfillment of the requirements. The most advantageous architectural pattern for the backend part of the Wallet application is the N-tier pattern. It provides the separation of components according to their functions. 3 tiers are the most optimal number because more tiers would introduce unnecessary complexity. The components and their relation are represented on the following diagram:
-
The
Presentation layer (Controller)is responsible for processing the incoming HTTP requests, validating the input, and passing the information to the Service layer -
Service layeris responsible for further data processing and contains the business logic -
Data layercommunicates with the database and contains all the data manupulation logic
- Minimize the validity of access token and use the refresh token scope of which is to get the new pair of tokens when the validity of the current one is expired
- Increase the tests’ quality and coverage
- Refactoring
- Adding functionalities









