Technical Assessment
Overview : Using Java, write a web based RESTful API for a fictional public library that can perform the following functions:
- List all books in the library
- CRUD operations on a single book The application does not have to be fully functional, but please take the time needed to exhibit your skills. There are no restrictions on what resources or third-party plugins you may use. We are looking for your best thoughts on application architecture, API design, maintainability, etc. Please return you submission as a link to a GitHub repo once completed. We look forward to seeing your results!
Technical notes:
- Multi-service architecture created using Docker compose
- Backend MySQL database called
library
containing one table,book
- init-db.sql used to create the database and populate it with two dummy records upon startup
- Spring Boot web app, with embedded Tomcat to run the library app
- Built using Maven
- 3-layer MVC architecture (Controller, Service, Repository, Domain)
- Lombok in use
- Book.java:
- entity class used to construct the table
- also a data transfer object used for serialization/deserialization
- Documented API requests/responses using Restdoc (not 100% functional - need to get the generated adoc snippets rendering correctly in the index.html file. For now, see index.pdf)
- Basic Controller testing
- Backend MySQL database called
Future improvements:
- Create a full frontend using angular
- Extend application so it represents a real-life library management system
- Improve Controller tests to return ResponseEntity, cover more edge cases
How to run:
- Download the repo to a location of your choice
- Execute the following command
docker-compose up -d
- Open the app on localhost:8080 and navigate to endpoint (see index.pdf for a list of available endpoints/requests/responses)