A typical user of the application would be able to do the following:
- Sign up or Create an account, if a new user
- Login, if a returning user
- Create a task
- View all tasks
- Update a task
- Delete a task
- Assign a status to each task, i.e pending, in-progress or done
- Spring Boot
- PostgreSQL
- Spring Data JPA
- Hibernate
- JUnit
- Postman
- Git
Some of the lessons learned while working on this task include:
- Creating proper folder structure as is applicable in Spring MVC
- Programming according to Object Oriented Programming (OOP) principles
- Exception handling in Spring
- Creating endpoints that follow correct REST API patterns
- Implementing Unit tests for all methods
- Design proper databases with normalization and entities relationship mapping where necessary
- Adding timestamps in databases where necessary
- Creating custom response structures both on success and failure of implementations
- Executing efficient SQL queries
Some of the challenges encountered on this project include:
- Persisting enums (task status) to the database
- Estimating the project duration in hours
- Assigning unique user ID (uuid) to each user and task