Welcome to CGI test assignment! This is the project template which contains Angular front-end and Spring Boot back-end
- Make sure you have installed Java. For development OpenJDK 11 from Adoptium should be used.
- Install Intellij IDEA Commmunity edition
- Import the Maven project
- Run the LibraryApplication from IDE.
However, you can also install Maven and run the back-end from terminal with
mvn spring-boot:run
in project directory
(make sure your JAVA_HOME variable is set up to point to
your Java 11 installation in that case)
To get Angular app up and running you need to:
-
Make sure you have NodeJS version 18+ installed.
-
Open the terminal.
-
Navigate to frontend project
cd frontend/
-
Install all dependencies with npm
npm install
. NB: This might take a while. -
Start the development server
npm run start
. Frontend runs on port 4200, so make sure it's not in use.First build takes a lot of time, so be patient...
-
Once development server is running, open app at http://localhost:4200. If you can see a list of books then it means that you have sucessfully set up and run the application
-
Start coding :)
##General guidelines
-
Tasks don't have to be completed in order.
-
Try to complete as many as possible.
-
You are free to modify both front-end and back-end as you deem necessary. This includes the option to use another front-end framework if you wish.
-
Regarding UI design, you are also free to choose: use Material Design components, your favorite library or implement everything yourself.
-
You can and are encouraged to also implement additional cool features that you think would really help showcase and distinguish your skills.
-
We appreciate if you use version control and commit often, so we can also get an insight into your workflow and how you approached the problems.
-
Please document your added functionality, it would be helpful if you point out what was easy / difficult / interesting etc
-
If you are using in your solution code written by other people (examples, tutorials, StackOverflow etc), then please cite the source for these blocks in your solution using comments. This helps us distinguish code written by you.
If you have any questions, please reach out without hesitation. Best of luck!
##Development tasks
- Using backend api endpoint /getBooks, implement table of books view
- Using backend api endpoint /getCheckouts, also implement the checkouts view. Suppport paging and sorting for both views
- Implement individual book and checkout view, support basic CRUD operations, implement checking out and returning books
- Implement searching for books using freetext criteria
- Implement filtering for books by status
- Implement saving / displaying favorite books for current user (you can use localStorage if you don't want to make back-end changes)
- Add modal confirmation dialogues when deleting or checking out books
- Implement a user-friendly way to display late checkouts
#####Bonus tasks:
- Implement advanced search form for books, where user can specify and combine different criterias (title, author year etc)
- Add UI and backend tests
- Add support for multiple languages
- Add support for multiple users and different user roles: reader and librarian. Reader should not be able to add / modify / delete existing book information or tamper with checkouts but should be able to save favorites and check out / return books (that they have checked out)
- Containerize your application to make it cloud-native