Introduction
For the Advanced Programming Topics course, we were assigned to develop an application according to the principles of a microservices architecture. Based on our interest in sports and software development, we chose to build a platform around a football competition. The application provides information about players, teams, matches and supporters, each managed through its own microservice.
Our solution is a modern, scalable and modular system that uses various technologies such as MongoDB, MySQL, Docker, React, Kubernetes and Google OAuth2.
What is Advanced Programming Topics?
This course focuses on advanced concepts from software development, including:
- Microservices and distributed systems
- Containerization and deployment with Docker and Kubernetes
- Authentication and security
- API architecture and integration The assignment gave us the opportunity to not only understand these concepts theoretically, but also to apply them practically in a complete end-to-end application.
Core Functionalities
Microservices
The backend consists of four separate services:
- Player-service: manages player information (MongoDB)
- Team-service: manages team data (MySQL)
- Match-service: registers matches and scores (MongoDB)
- Supporter-service: manages supporter data and favorite teams/players (MySQL) All services run in Docker containers and communicate via REST APIs, controlled by a central API Gateway.
Authentication
For security, we integrated Google OAuth2.
- Without login: only read rights (GET) on public data
- With login: full access to management functions (POST, PUT, DELETE)
- Authentication is handled in the frontend and forwarded to the gateway via tokens.
Frontend
The frontend is a responsive React application, styled with TailwindCSS and hosted via Nginx. Users can:
- View or manage teams and players
- Create, edit or delete matches
- Link supporters to favorite teams/players
- Log in via Google
Deployment
All services are built as Docker images and run in a simulated production environment with fixed ports. Each service has its own database connection and unique configuration:
- MongoDB for player and match service
- MySQL for team and supporter service
- Management via Postman and endpoint documentation
Screenshots
Reflection
This project was a very instructive experience in which we could optimally combine theory and practice. The division into microservices forced us to think carefully about domain modeling, service boundaries and data consistency.
Additionally, we learned:
- How containerization with Docker simplifies the development process.
- How to work with different databases simultaneously within one ecosystem.
- How important clear API and good endpoint documentation are.
- How to develop frontends and backends separately but coordinated.
We are proud of the final result and see this project as valuable preparation for real-world software development within larger teams and complex systems.