/backend-coding-challenge

Thermondo's backend coding challenge 🍿

Primary LanguageGoMIT LicenseMIT

🍿 Movie Rating System

The original documentation containing the full challenge description is here.

🚀 System Architecture in a high level

MRS Architecture

📚 Documentations

Each system component (service or client) is documented in its respective repository:

🏃 How to run

In order to run the system locally, there are two simple alternatives. Note that both options require Docker:

1. From this directory, run:

make compose

This command will spin up all the containerized components.

2. See the documentations to learn how to start each service or client independently. For the databases, either you run your own instances of MongoDB and Redis or just run:

make run-db

This command will spin up all the 3 MongoDB and one Redis containers.

Database migration

To populate the database with 1M+ movies data, run:

cd services/movie && make migrate

The dataset used in this task is provided by TMDB under ODC Attribution License (ODC-By).

✅ Requirements

  • The backend should expose RESTful endpoints to handle user input and return movie ratings.
  • The system should store data in a database. You can use any existing dataset or API to populate the initial database.
  • Implement user endpoints to create and view user information.
  • Implement movie endpoints to create and view movie information.
  • Implement a rating system to rate the entertainment value of a movie.
  • Implement a basic profile where users can view their rated movies.
  • Include unit tests to ensure the reliability of your code.
  • Ensure proper error handling and validation of user inputs.

✨ Bonus Points

  • Implement authentication and authorization mechanisms for users.
  • Provide documentation for your API endpoints using tools like Swagger.
  • Implement logging to record errors and debug information.
  • Implement caching mechanisms to improve the rating system's performance.
  • Implement CI/CD quality gates.

🌄 Future Improvements

  • Update/delete/list User endpoints
  • Update/delete/list Movie endpoints
  • Monitoring/observability
  • GraphQL or an API Gateway/Routing Service and communication through gRPC
  • Recommendation Service
  • Production-ready WebApp