Welcome to our Movie Rating System Coding Challenge! We appreciate you taking the time to participate and submit a coding challenge! ๐ฅณ
In this challenge, you'll be tasked with designing and implementing a robust backend system that handles user interactions and provides movie ratings. We don't want to check coding conventions only; we want to see your approach to systems design!
- 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.
- 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.
- Systems Design: We want to see your ability to design a flexible and extendable system. Apply design patterns and software engineering concepts.
- Code quality: Readability, maintainability, and adherence to best practices.
- Functionality: Does the system meet the requirements? Does it provide movie ratings?
- Testing: Adequate test coverage and thoroughness of testing.
- Documentation: Clear documentation for setup, usage, and API endpoints.
- Fork this GitHub repository.
- Commit your code regularly with meaningful commit messages.
- Include/Update the README.md file explaining how to set up and run your backend, including any dependencies.
- Submit the link to your repository.
- You are encouraged to use third-party libraries or frameworks to expedite development but be prepared to justify your choices.
- Feel free to reach out if you have any questions or need clarification on the requirements.
- Remember to approach the challenge as you would a real-world project, focusing on scalability, performance, and reliability.
Part of the exercise is to see what you prioritize first when you have a limited
amount of time. For any unfinished tasks, please do add TODO
comments to
your code with a short explanation. You will be given an opportunity later to go
into more detail and explain how you would go about finishing those tasks.