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
main
branch and merge it, don't forget to delete the feature branch afterwards - Create a new branch name
feature/core-functions
frommain
- Do these features:
- Only
ADMIN
role can use User API - Only
PRODUCT_OWNER
role can create a project and tasks - Only
PRODUCT_OWNER
role can assign tasks to a team member in their project - Task will have either
NOT_STARTED
,IN_PROGRESS
,READY_FOR_TEST
,COMPLETED
status - 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/projects
API. It should be able to receive query strings:q
-> search keyword, will search for namepageIndex
-> the index of the page to shown, default0
pageSize
-> how many items to return, default3
sortBy
-> attribute to sort, defaultname
sortDirection
-> 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
docs
directory - Commit the changes with message "Add postman collection"
- Create a PR against
main
branch and merge it, don't forget to delete the feature branch afterwards
- Implement caching for the pagination API using
ConcurrentMap
orredis
- Package the application into a Docker image and deploy it to Heroku
- Implement distributed tracing with sleuth