Application Setup (DO THIS FIRST)
- Fork this repository into your GitHub account (You can create a GitHub account if you don't have one)
- Clone the repository from your repository.
- Run the project, ensure project run without any problem.
This project is about a backend of project management application. User can create a project and practice agile methodology using SCRUM framework.
A project will be able to have team members and tasks which can be assigned to ONLY one team member per task.
Team member only have visibility to their projects.
- Create a new branch name
feature/rest-api - Create entities (you can add more entities and more fields inside the entity should you need it)
- User
- id | uuid | required | pk
- username | string | required | unique
- password | string | required
- Project
- id | uuid | required | pk
- name | string | required | unique
- Task
- id | uuid | required | pk
- title | string | required
- description | string
- status | string | required
- project_id | uuid | required
- user_id | uuid | required
- User
- Commit the changes with message "Create entities"
- Create REST APIs to manage User, Project and Task, your APIs must include
- GET retrieve all resources (ex.
GET /api/v1/users) - GET retrieve one resource by id (ex.
GET /api/v1/users/{user_id}) - POST create one resource (ex.
POST /api/v1/users) - PUT update one resource idempotent (ex.
PUT /api/v1/users/{user_id}) - PATCH update one resource (ex.
PATCH /api/v1/users/{user_id}) - DELETE remove one resource (ex.
DELETE /api/v1/users/{user_id})
- GET retrieve all resources (ex.
- Add any other APIs and codes that you think you might need in order for this app to work properly
- Commit the changes with message "Create REST APIs"
- Create a PR against
mainbranch and merge it, don't forget to delete the feature branch afterwards - Create a new branch name
feature/core-functionsfrommain - Do these features:
- Only
ADMINrole can use User API - Only
PRODUCT_OWNERrole can create a project and tasks - Only
PRODUCT_OWNERrole can assign tasks to a team member in their project - Task will have either
NOT_STARTED,IN_PROGRESS,READY_FOR_TEST,COMPLETEDstatus - When a task is created, status will be
NOT_STARTED - Team member can only change the status of the task assigned to them, they can edit any other attribute in a task.
- Only
- Commit the changes with message "Implement features"
- Write tests for:
- Creating a user, use
TestRestTemplate - Creating a project and assign 2 users to it.
- User change the status of a task assigned to themselves
- Creating a user, use
- Commit the changes with message "Write test"
- Implement pagination feature
GET /api/v1/projectsAPI. It should be able to receive query strings:q-> search keyword, will search for namepageIndex-> the index of the page to shown, default0pageSize-> how many items to return, default3sortBy-> attribute to sort, defaultnamesortDirection-> direction of the sort, defaultASC
- Commit the changes with message "Implement pagination"
- Create a postman collection for every API that you have created along with examples and put it in
docsdirectory - Commit the changes with message "Add postman collection"
- Create a PR against
mainbranch and merge it, don't forget to delete the feature branch afterwards
- Implement caching for the pagination API using
ConcurrentMaporredis - Package the application into a Docker image and deploy it to Heroku
- Implement distributed tracing with sleuth