Please spend nothing more than 2 hours on this test.
In this coding test, you must develop a small backend system using Java 8/11 that serves a hypothetical online bookstore. The system will have two types of users, customers and administrators.
As a minimum, the system should provide the following features:
- Register an account
- Browse books by category
- Add and remove books from their shopping cart
- Checkout and buy the books in their shopping cart
- Administrators should be able to:
Add new books to the system (title, author, category, price, stock quantity) Update the details of existing books Delete a book from the system The system should persist data to a PostgreSQL database. You should provide a database schema that suits these requirements.
- Use Java 8/11 to implement the system.
- Your code should be well-organized, and you should make use of appropriate design patterns.
- Write tests for your code using a testing framework of your choice.
- Document your code and provide instructions on how to run it.
- Include SQL scripts for creating the database schema and any necessary data.
- You're free to use any Java frameworks/libraries that you find appropriate.
- Proficient use of Java 8/11.
- Effective use of PostgreSQL and knowledge of database modelling techniques.
- Usage of appropriate design patterns and architecture.
- How well do you use version control systems. Please make regular commits, and we'll review your use of semantic versioning.
- Code cleanliness and maintainability.
- The thoroughness of your testing.
- The first stage interview was a hint into what is expected of the role. Therefore this is your opportunity to showcase these.
- Feel free to brush up on any other elements discussed in the interview. E.g Design Patterns, OWASP, Docker ...
- As a newbie to this project, I should be able to stand everything up with the least steps and be able to replicate these in any system, be it Mac or Windows
- You'll have lots of questions regarding choices; these are for you to make and be able to justify them. Do what makes sense to you and want you'll do in a real situation
Please host your code in a private repository on GitHub. Include all the instructions needed to run your application in the README file of your repository. We prefer incremental commits that show your progress rather than one large commit with all the changes.