My album is a backend system that allow users to store and manage their albums, photos and videos in an easy and secure way.
My album is a robust backend system 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 Notification Service.
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 Notification Service is responsible for sending e-mail notifications to users on important occasions. This service is constantly reading messages from Kafka in order to send real-time notifications to the users. It has an integration with MailHog service for Email Testing.
Node
TypeScript
Express
Kong Gateway
MongoDB
PostgreSQL
Apache Kafka
Amazon S3
MailHog
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
- Retrieve user's active albums
- Retrieve user's deleted albums
- Retrieve user's album and its files
- Upload a file to an album
- Delete a file from an album
- Move files from one album to another
- Implement a front-end application to interact with the system
- 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