My album is an application that allow users to store and manage their albums, photos and videos in an easy and secure way.
My album is a web application designed to offer users a secure and efficient way to store and manage their digital albums, photos, and videos. This system leverages a microservice event-driven architecture, ensuring that all service-to-service communications occur asynchronously via a distributed streaming platform, specifically Apache Kafka. This architectural choice enhances the responsiveness and scalability of the platform, facilitating seamless interactions across various services.
The architecture is composed by three main services: User Management Service, File Manager Service and a Web Application.
The User Management Service is responsible for handling the management and authentication of users within the system. This service uses a MongoDB database to save all required information and communicates with other services in an asynchronous way by using Kafka Topics to send messages.
The File Manager Service is responsible for allowing users to manage their files. This service uses a Postgres database to save all required information and uses the Amazon S3 service to store the actual files. It also communicates with other services through Kafka topics.
The Web app is the frontend web application that allow users to interact with the system.
Node
TypeScript
Express
NextJS
ReactJS
Tailwindcss
Kong Gateway
MongoDB
PostgreSQL
Apache Kafka
Amazon S3
Docker
Docker Compose
Jest
Microservices
Observer
Transactional Outbox
Repository
Factory
SOLID
Decorator
You must have Docker and Docker Compose installed.
Run the following command in the project's root folder
docker compose up -d --build
You can find a swagger file in the @docs folder.
I recommend using a swagger editor like this to visualize all available routes.
- User creation
- User login
- Refresh token
- Album creation
- Album deletion
- List user's active albums
- List user's deleted albums
- List user's album and its files (infinite scroll)
- Upload files to an album
- Delete files of an album
- Move files from one album to another
- Download files
- Create a recover password feature
- Create a file recovery feature
- Create a MFA feature
- Create a see all files feature
- Update user information feature
- Update password feature
- Add monitoring services
🛠️ Created by eduardogomesf