Moneybag
Moneybag is a tool for managing personal finances that allows users to create and categorize records, analyze income and expenses, and manage multiple accounts.
The backend was written in Java using the Spring framework and uses a MySql database for data persistence. The frontend is a single-page application connected via REST API and built with TypeScript, Vue.js, and Vuetify.
- Java
- Spring
- MySql
- Swagger
- Docker
- Vue.js
- Vuetify
- TypeScript
- git
Project Goals
I created this project for several reasons. Firstly, I wanted to experiment with various technologies. Secondly, I aimed to experience all stages of the software development cycle. Additionally, I intended to add work to my portfolio that would demonstrate my development skills.
Realization
To begin, I made a list of the necessary features and selected the appropriate technologies, and then started developing the backend server.
I developed the backend in Java and Spring framework and chose the MySql database for data persistence. The application utilizes the MVC architecture. The database runs in a Docker container. Authentication and authorization are provided by JWT token using Spring Security. The API generates Open Api documentation automatically. Additionally, I created documentation for the API using Postman, which includes example requests and responses.
After that, I continued with the development of the frontend. I developed the front end as a SPA using the Vue.js framework using TypeScript instead of JavaScript for convenience and using the Vuetify component library. I used the Axios library for communication with the API and the Apex charts library for chart rendering. I also set up an automatic build process on GitHub using GitHub actions.
Issues
During the development, I encountered some issues. One of them was adding filtering and sorting parameters to the "get all records" endpoint. To solve this problem, I used the specification-arg-resolver library which can map request parameters to Jpa specifications and extended the record repository by PagingAndSortingRepository, and JpaSpecificationExecutor.
Conclusion
I originally planned to create a much smaller project but finished with a larger one.
Developing this project improved my skills in backend development, including creating custom JPQL queries, and API filters, and working with Spring Security.