Roberto Dellantonio

Roberto Dellantonio

Full Stack Software Developer
Predazzo, Italia
Qualcosa su di me

As a recent graduate of the University of Trento with a degree in Information Engineering and Business Organization, I have gained a strong foundation in computer science and a passion for developing scalable, reliable and efficient solutions for complex software projects. In addition to my studies, I also completed a three-month internship in Barcelona at an e-commerce company, where I gained hands-on experience in web marketing and e-commerce development.
Since April 2023, I have been working as a Full Stack developer at Fleap, where I have been actively contributing to the development of simple and reliable software solutions for the company. In my career, I have had the opportunity to work with talented teams of developers and have developed a range of skills and expertise.
Some of my key achievements include:

  • 🚀 Successfully developed and launched an e-commerce platform for a family business

  • 📈 Contributed to the development of various software projects, consistently meeting project deadlines and exceeding quality standards

  • 💻 Demonstrated strong problem-solving and communication skills in a fast-paced, team-oriented environment

  • 🙍 Developed many personal projects with new technologies and published on my personal GitHub portfolio with an important documentation.

  • 📅 In the future, I am eager to continue learning and growing as a software engineer, and hope to take on more leadership roles and work on challenging and meaningful projects that make a positive impact.


Building a Multi-Tenant Web Application

I want to share with you a personal project that I worked on a couple of years ago while I was studying React and Spring Boot. It's a web application that can support multiple companies with different data and configurations, using the multi-tenancy approach. I will tell you what the project is about, how I designed and implemented it, what challenges I faced, what benefits I gained, and what outcomes I achieved. I hope you will enjoy reading this blog post and learn something new and useful.

What is the project about?

The project started as a fidelity management system for companies. The idea was to create a platform where companies can manage their customer loyalty programs, such as rewarding their customers with points and vouchers, and tracking their customer behavior and preferences. However, as I was working on the project, I realized that I was more interested in learning complex methodologies and technologies than creating a real-world product. So, I decided to change the focus of the project and make it more an academic project. The new goal of the project was to create a modular application that can be used as a template for future projects that use the multi-tenancy approach. Multi-tenancy is a software architecture pattern that allows a single application to serve multiple clients or tenants, each with their own data and configurations, while ensuring data isolation and security. For example, imagine a web application that allows different companies to create and manage their own websites. Each company would have its own domain name, logo, theme, content, and users, but they would all use the same web application. That's what multi-tenancy is about.

How did I design and implement the project?

The project is a full-stack web application that uses React for the frontend and Spring Boot for the backend. The project also uses MongoDB, a NoSql database, to store the data of each tenant. The project consists of four modules: the core module, the web module, the security module, and the email module. The core module contains the common functionalities and utilities that are used by the other modules, such as the models, the repositories, the services, the exceptions, and the constants. The web module contains the controllers and the DTOs that handle the REST API requests and responses. The security module contains the configuration and the components that handle the authentication and authorization of the users, such as the filters, the providers, the tokens, and the authorities. The email module contains the configuration and the components that handle the email sending and receiving, such as the templates, the listeners, and the events.

The frontend of the project is a React application that uses functional components and hooks to create the user interface. The frontend uses MUI, a library of React components that follow the Material Design guidelines, to create a beautiful and responsive web application. The frontend also uses Axios, a library that simplifies the HTTP requests and responses, to communicate with the backend. The frontend also uses React Router, a library that handles the navigation and routing of the application, to create different pages and components. The frontend also uses Redux, a library that manages the state of the application, to store and update the data of the user and the company. The frontend also uses Chart.js, a library that creates interactive charts and graphs, to display the analytics and reports of the company.

What challenges did I face?

The main challenges I faced while working on this project were related to the multi-tenancy approach and the NoSql database. To implement the multi-tenancy approach, I had to create and access different MongoDB databases dynamically, depending on the tenant identifier. To do this, I used mongoFactory and mongoTemplate, two classes that allow me to create and access different MongoDB databases programmatically. I also used a custom annotation and a custom filter to identify the tenant identifier from the request header and to set the current database accordingly. To learn how to use a NoSql database, I had to change my mindset from the relational model to the document model. I had to learn how to design and query the data using documents and collections, instead of tables and rows. I also had to learn how to use the aggregation framework, a feature that allows me to perform complex data analysis and manipulation. I also had to learn how to use the Spring Data MongoDB, a module that simplifies the interaction with MongoDB using annotations and repositories.

What benefits did I gain?

The main benefits of this project are the knowledge and skills I gained about the multi-tenancy approach and the NoSql databases, but also about the Spring Boot framework and React. I learned how to create a modular and scalable web application that can support multiple clients with different data and configurations. I also learned how to use a NoSql database that can handle large and complex data more efficiently and flexibly. I also learned how to use the Spring Boot framework and React to create a full-stack web application that follows the best practices and standards of the industry. I also learned how to use various libraries and tools that enhance the functionality and the appearance of the web application.

What outcomes did I achieve?

As it is right now, I don't think this project can be used in a real world scenario because it is not complete and it is not optimized. However, I think that this project can be used as a template for future projects that use the multi-tenancy approach. I think that this project can be improved and extended by adding more features and functionalities to the fidelity management system, such as the ability to create and redeem vouchers, the ability to send and receive notifications, the ability to integrate with external services and APIs, and the ability to customize the look and feel of the web application. I also think that this project can be optimized and refined by improving the performance and the security of the web application, such as the caching, the logging, the testing, the error handling, and the encryption.

If you are interested in my project, you can find the source code and the documentation on GitHub: . You can also contact me if you have any questions or feedback. I hope you enjoyed reading this story and I hope you learned something new and useful. 😊

I miei progetti
  • MyForment
    • Building a Multi-Tenant Web Application