Skip to content

Latest commit

 

History

History
97 lines (68 loc) · 3.75 KB

README.md

File metadata and controls

97 lines (68 loc) · 3.75 KB

Project Overview

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

Description

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.

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 Web app is the frontend web application that allow users to interact with the system.

Key Technologies:

Node
TypeScript
Express
NextJS ReactJS Tailwindcss Kong Gateway
MongoDB
PostgreSQL
Apache Kafka
Amazon S3
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

  • 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
  • Add infinite scroll feature

🛠️ Created by eduardogomesf