์ด์ ๋ TaskEvent๋ฅผ ๋์
ํด์
์ํ ๋ณํ๋ฅผ ๊ธฐ๋กํ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์๋ค.
์ค๋์ ๊ทธ ๋ค์ ๋จ๊ณ๋ค.
๊ธฐ๋กํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ณด์ฌ์ค ๊ฒ์ธ๊ฐ
๋จ์ํ ์ ์ฅํ๋ ๊ฑธ ๋์ด์
์ด์ ๋ ์กฐํ ๊ตฌ์กฐ๋ฅผ ์ ๋๋ก ๋ง๋๋ ๋ ์ด์๋ค.
์๋ฅผ ๋ค์ด,
์์
์ ๊ณ์ ์์ด๋๋ฐ
๋ง์ ์ด๋ค ํ๋ฆ์ผ๋ก ์งํ๋๊ณ ์๋์ง๋
ํ๋์ ๋ณด๊ธฐ ์ด๋ ค์ด ์ํ์๋ค.
ํ๋์ ๋ณด๊ธฐ ์ด๋ ค์ด ์ํ์๋ค.
๊ทธ๋์
๋จ์ ์กฐํ๊ฐ ์๋๋ผ
ํ๋ฆ์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด ํ์ํ๋ค
๊ธฐ์กด์๋ ์ด๋ฐ ์กฐํ๋ง ๊ฐ๋ฅํ๋ค.
GET /tasks
์ด๊ฑด ๋จ์ํ ์ ์ฒด ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ ์์ค์ด๋ค.
๊ทผ๋ฐ ์ค์ ๋ก ํ์ํ ๊ฑด ์ด๋ฐ ์กฐํ๋ค.
GET /tasks?status=TODO
GET /tasks?status=IN_PROGRESS
โ ์ง๊ธ ํด์ผ ํ ์์
๋ง ๋ณด๊ณ ์ถ๋ค
โ ์งํ ์ค์ธ ์์
๋ง ๋ณด๊ณ ์ถ๋ค
๊ทธ๋์ ์ํ ๊ธฐ๋ฐ ์กฐํ๋ฅผ ์ถ๊ฐํ๋ค.

status ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด IN_PROGRESS ์ํ์ ์์ ๋ง ํํฐ๋งํ์ฌ ์กฐํํ ์ ์๋ค.
Task์๋ ์ด๋ฏธ projectId๊ฐ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฐ ์กฐํ๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค.
GET /tasks?projectId=1
GET /tasks?projectId=1&status=TODO
์ด๊ฑด ๋จ์ํ ํํฐ ์ถ๊ฐ๊ฐ ์๋๋ผ,
ํ๋ก์ ํธ ๋จ์๋ก ์์ ํ๋ฆ์ ์กฐํํ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๊ฒ์ด๋ค.
์ฌ๋ฌ ์์
์ ๋ฌถ์ด์
๊ฐ์ ํ๋ฆ ์์์ ๋ณผ ์ ์๋ ๊ธฐ๋ฐ์ด ๋ง๋ค์ด์ง ์
์ด๋ค
์์ง Project ๋๋ฉ์ธ์ ์์ง๋ง,
์กฐํ ๊ตฌ์กฐ๋ ์ด๋ฏธ ๊ทธ๊ฑธ ๊ธฐ์ค์ผ๋ก ๋์ํ๋ค.

projectId๋ฅผ ๊ธฐ์ค์ผ๋ก ์์
์ ํํฐ๋งํ์ฌ,
ํน์ ํ๋ก์ ํธ ๋จ์๋ก ์์
๋ชฉ๋ก์ ์กฐํํ ์ ์๋ค.
๊ธฐ์กด ์๋ต์ ์ด๋ฌ๋ค.
{
"id": 1,
"title": "...",
"status": "TODO"
}
๊ทผ๋ฐ ์ด๊ฑด ํ์ฌ ์ํ๋ง ๋ณด์ฌ์ค๋ค.
๊ทธ๋์ ์๋ต์ ์ด๋ ๊ฒ ํ์ฅํ๋ค.
{
"id": 1,
"projectId": 1,
"status": "IN_PROGRESS",
"createdAt": "...",
"startedAt": "...",
"completedAt": null
}
์ด์ ๋ ๋จ์ ๋ชฉ๋ก์ด ์๋๋ผ
์ด ์์
์ด ์ธ์ ๋ง๋ค์ด์ก๊ณ ์ธ์ ์์๋๊ณ
์ง๊ธ ์ด๋๊น์ง ์๋์ง๋ฅผ ๊ฐ์ด ๋ณด์ฌ์ค๋ค.
โ ์กฐํ API ์์ฒด๊ฐ ํ๋ฆ ์ ๋ณด๋ฅผ ํฌํจํ๊ฒ ๋๋ค.
โป ์ด ๋ถ๋ถ์ ์์ ์ฒจ๋ถ๋ Task ์กฐํ ์๋ต ์ด๋ฏธ์ง๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
๊ธฐ์กด์๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์์๋ค.
GET /tasks/999/events
โ ์กด์ฌํ์ง ์๋ Task์ธ๋ฐ๋ ๊ทธ๋ฅ ๋น ๋ฐฐ์ด ๋ฐํ
์ด๊ฑด ์ ๋งคํ๋ค.
Task๊ฐ ์๋ ๊ฑด์ง
์ด๋ฒคํธ๊ฐ ์๋ ๊ฑด์ง
๊ตฌ๋ถ์ด ์ ๋๋ค.
๊ทธ๋์ ์ด๋ฒคํธ ์กฐํ ์ ์
Task ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋จผ์ ๊ฒ์ฆํ๋๋ก ์์ ํ๋ค.
โ ์ด์ ๋ ์๋ Task๋ ๋ช ํํ๊ฒ ์๋ฌ๋ก ์ฒ๋ฆฌ๋๋ค.
์ฌ๊ธฐ์๋ถํฐ๊ฐ ์ง์ง๋ค.
์ด๋ฒคํธ๋ฅผ ์กฐํํ๋ ๊ฒ๊ณผ
๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋ค๋ฅด๋ค.
๊ทธ๋์ ๋ง๋ API:
GET /tasks/{id}/timeline
์ด API๋ ๋จ์ ์ด๋ฒคํธ ๋ฆฌ์คํธ๊ฐ ์๋๋ผ
์์ ์ ์ํ ๋ณํ ํ๋ฆ์ ์๊ฐ ์์ผ๋ก ๋ณด์ฌ์ค๋ค
์ด ํ๋ฆ์ ์๊ฐ ์ ๋ณด๋ฅผ ๋ํ๋ฉด,
์์
์ด ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์งํ๋๋์ง๊น์ง ํ์
ํ ์ ์๋ค
์ฆ,
๋จ์ํ ์ํ๊ฐ ๋ฐ๋์๋ค๊ฐ ์๋๋ผ
์ด๋ ๊ตฌ๊ฐ์์ ์ค๋ ๋จธ๋ฌผ๋ ๋์ง๊น์ง ๋ณผ ์ ์๊ฒ ๋๋ค
๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์จ๋ ๋ชฉ์ ์ด ๋ค๋ฅด๋ค.
/events โ ์๋ณธ ๋ก๊ทธ
/timeline โ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ํ๋ฆ
๊ทธ๋์ DTO๋ ๋ถ๋ฆฌํ๋ค.
TaskEventResponse โ ๋ก๊ทธ์ฉ
TaskTimelineResponse โ ํ์๋ผ์ธ์ฉ
โ ์ด๊ฑด ๋จ์ ๊ตฌ์กฐ๊ฐ ์๋๋ผ ์ญํ ๋ถ๋ฆฌ ์ค๊ณ๋ค.
ํ์๋ผ์ธ์์ ํ ๋จ๊ณ ๋ ๊ฐ๋ค.
๊ฐ ์ด๋ฒคํธ๊ฐ ์ด์ ์ด๋ฒคํธ ์ดํ ์ผ๋ง๋ ๊ฑธ๋ ธ๋์ง ๊ณ์ฐ
์๋ฅผ ๋ค๋ฉด:
CREATED โ STARTED (10๋ถ ํ)
STARTED โ BLOCKED (20๋ถ ํ)
์ด๊ฑธ ์๋ต์ ํฌํจ์์ผฐ๋ค.
{
"eventType": "STARTED",
"minutesFromPreviousEvent": 10
}
๋จ์ํ ์ด๋ฒคํธ ํ๋ฆ๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์๋๋ผ,
๊ฐ ์ํ ๋ณํ ์ฌ์ด์ ์๊ฐ ๊ฐ๊ฒฉ๊น์ง ํจ๊ป ํ์ธํ ์ ์๊ฒ ๋์๋ค.
์ค์ ์๋ต์ ๋ค์๊ณผ ๊ฐ๋ค.


์ด๋ฅผ ํตํด
์์
์ด ์ด๋ ๊ตฌ๊ฐ์์ ์ค๋ ๋จธ๋ฌผ๋ ๋์ง
์งํ ์๋๊ฐ ์ด๋ค์ง๊น์ง ํ์
ํ ์ ์๋ค
์ค๋ ํ ์ผ์ ํ ์ค๋ก ์ ๋ฆฌํ๋ฉด ์ด๊ฑฐ๋ค.
์ด๋ฒคํธ๋ฅผ ๋จ์ ์กฐํํ๋ ๊ฒ์ ๋์ด์
์๊ฐ ํ๋ฆ๊น์ง ํฌํจํ ์์
ํ๋ฆ์ผ๋ก ์ฌ๊ตฌ์ฑํ๋ค
CREATE โ๏ธ
READ โ๏ธ
STATUS FILTER โ๏ธ
PROJECT FILTER โ๏ธ
EVENT LOGGING โ๏ธ
TIMELINE โ๏ธ
DURATION โ๏ธ
์ด์ ๋จ์ CRUD๊ฐ ์๋๋ผ
ํ๋ฆ ๊ธฐ๋ฐ ์กฐํ ์์คํ ์ ํํ๋ฅผ ๊ฐ์ถ๊ธฐ ์์ํ๋ค
๋ค์ ๋จ๊ณ๋ ์ด๊ฑฐ๋ค.
Project ๋๋ฉ์ธ ์ถ๊ฐ
ํ์๋ผ์ธ์ ํ๋ก์ ํธ ๋จ์๋ก ํ์ฅ
์ด์ Task ํ๋๊ฐ ์๋๋ผ
ํ๋ก์ ํธ ์ ์ฒด ํ๋ฆ์ผ๋ก ํ์ฅํ ์ฐจ๋ก๋ค.