Skip to content

eduardogomesf/my-album

Repository files navigation

Project Overview

My album is a backend system that allow users to store and manage their albums, photos and videos in an easy and secure way.

Description

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.

System Design

System Design

Interested in running the project?

Go to how to run section

Services

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.

Key Technologies:

Node
TypeScript
Express
Kong Gateway
MongoDB
PostgreSQL
Apache Kafka
Amazon S3
MailHog
Docker
Docker Compose
Jest

Patterns and Design Principles applied

Microservices
Observer
Transactional Outbox
Repository
Factory
SOLID
Decorator

Running the project on Docker

You must have Docker and Docker Compose installed.

Run the following command in the project's root folder

docker compose up -d --build

Documentation

You can find a swagger file in the @docs folder.

I recommend using a swagger editor like this to visualize all available routes.

Available features

  • 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

Possible improvements

  • 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