|
| 1 | +# Getting Started |
| 2 | + |
| 3 | +Application Setup (DO THIS FIRST) |
| 4 | + |
| 5 | +1. Fork this repository into your GitHub account (You can create a GitHub account if you don't have one) |
| 6 | +2. Clone the repository from your repository. |
| 7 | +3. Run the project, ensure project run without any problem. |
| 8 | + |
| 9 | +### Project Overview |
| 10 | +This project is about a backend of project management application. User can create a project and practice agile methodology using SCRUM framework. |
| 11 | + |
| 12 | +A project will be able to have team members and tasks which can be assigned to **ONLY** one team member per task. |
| 13 | + |
| 14 | +Team member only have visibility to their projects. |
| 15 | + |
| 16 | +### Instructions (MANDATORY) - FOLLOW EXACTLY |
| 17 | +1. Create a new branch name `feature/rest-api` |
| 18 | +2. Create entities (you can add more entities and more fields inside the entity should you need it) |
| 19 | + 1. User |
| 20 | + 1. id | uuid | required | pk |
| 21 | + 2. username | string | required | unique |
| 22 | + 3. password | string | required |
| 23 | + 2. Project |
| 24 | + 1. id | uuid | required | pk |
| 25 | + 2. name | string | required | unique |
| 26 | + 3. Task |
| 27 | + 1. id | uuid | required | pk |
| 28 | + 2. title | string | required |
| 29 | + 3. description | string |
| 30 | + 4. status | string | required |
| 31 | + 5. project_id | uuid | required |
| 32 | + 6. user_id | uuid | required |
| 33 | +3. Commit the changes with message "Create entities" |
| 34 | +4. Create REST APIs to manage User, Project and Task, your APIs must include |
| 35 | + 1. GET retrieve all resources (ex. `GET /api/v1/users`) |
| 36 | + 2. GET retrieve one resource by id (ex. `GET /api/v1/users/{user_id}`) |
| 37 | + 3. POST create one resource (ex. `POST /api/v1/users`) |
| 38 | + 4. PUT update one resource idempotent (ex. `PUT /api/v1/users/{user_id}`) |
| 39 | + 5. PATCH update one resource (ex. `PATCH /api/v1/users/{user_id}`) |
| 40 | + 6. DELETE remove one resource (ex. `DELETE /api/v1/users/{user_id}`) |
| 41 | +5. Add any other APIs and codes that you think you might need in order for this app to work properly |
| 42 | +6. Commit the changes with message "Create REST APIs" |
| 43 | +7. Create a PR against `main` branch and merge it, don't forget to delete the feature branch afterwards |
| 44 | +8. Create a new branch name `feature/core-functions` from `main` |
| 45 | +9. Do these features: |
| 46 | + 1. Only `ADMIN` role can use User API |
| 47 | + 2. Only `PRODUCT_OWNER` role can create a project and tasks |
| 48 | + 3. Only `PRODUCT_OWNER` role can assign tasks to a team member in their project |
| 49 | + 4. Task will have either `NOT_STARTED`, `IN_PROGRESS`, `READY_FOR_TEST`, `COMPLETED` status |
| 50 | + 5. When a task is created, status will be `NOT_STARTED` |
| 51 | + 6. Team member **can only** change the status of the task assigned to them, they can edit any other attribute in a task. |
| 52 | +10. Commit the changes with message "Implement features" |
| 53 | +11. Write tests for: |
| 54 | + 1. Creating a user, use `TestRestTemplate` |
| 55 | + 2. Creating a project and assign 2 users to it. |
| 56 | + 3. User change the status of a task assigned to themselves |
| 57 | +12. Commit the changes with message "Write test" |
| 58 | +13. Implement pagination feature `GET /api/v1/projects` API. It should be able to receive query strings: |
| 59 | + 1. `q` -> search keyword, will search for name |
| 60 | + 2. `pageIndex` -> the index of the page to shown, default `0` |
| 61 | + 3. `pageSize` -> how many items to return, default `3` |
| 62 | + 4. `sortBy` -> attribute to sort, default `name` |
| 63 | + 5. `sortDirection` -> direction of the sort, default `ASC` |
| 64 | +14. Commit the changes with message "Implement pagination" |
| 65 | +15. Create a postman collection for every API that you have created along with examples and put it in `docs` directory |
| 66 | +16. Commit the changes with message "Add postman collection" |
| 67 | +17. Create a PR against `main` branch and merge it, don't forget to delete the feature branch afterwards |
| 68 | + |
| 69 | +### Instructions (BONUS) |
| 70 | +1. Implement caching for the pagination API using `ConcurrentMap` or `redis` |
| 71 | +2. Package the application into a Docker image and deploy it to Heroku |
| 72 | +3. Implement distributed tracing with sleuth |
0 commit comments