Skip to content

Commit 0da6bb5

Browse files
committed
Initial commit
0 parents  commit 0da6bb5

File tree

16 files changed

+684
-0
lines changed

16 files changed

+684
-0
lines changed

.gitignore

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
HELP.md
2+
target/
3+
!.mvn/wrapper/maven-wrapper.jar
4+
!**/src/main/**/target/
5+
!**/src/test/**/target/
6+
7+
### STS ###
8+
.apt_generated
9+
.classpath
10+
.factorypath
11+
.project
12+
.settings
13+
.springBeans
14+
.sts4-cache
15+
16+
### IntelliJ IDEA ###
17+
.idea
18+
*.iws
19+
*.iml
20+
*.ipr
21+
22+
### NetBeans ###
23+
/nbproject/private/
24+
/nbbuild/
25+
/dist/
26+
/nbdist/
27+
/.nb-gradle/
28+
build/
29+
!**/src/main/**/build/
30+
!**/src/test/**/build/
31+
32+
### VS Code ###
33+
.vscode/

.mvn/wrapper/maven-wrapper.jar

57.4 KB
Binary file not shown.

.mvn/wrapper/maven-wrapper.properties

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
2+
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

README.md

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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

docs/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
## Put your Postman collection here.

0 commit comments

Comments
 (0)