๋ ๋ฆฝ ๋ฆฌ๋ง์ธ๋ CRUD์, ํฅํ 24์๊ฐ ์ด๋ด์ ํตํฉ upcoming ์กฐํ(๋ ๋ฆฝ ๋ฆฌ๋ง์ธ๋ + ์บ๋ฆฐ๋ ์ด๋ฒคํธ ๋ฆฌ๋ง์ธ๋)๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฆผ ๋ฐ์กยท์ค์ ํํฐ๋ ์๋ฆผ API์ ์ฐ๋๋ฉ๋๋ค.
๋ผ์ฐํธ ํ์ผ:
backend/src/routes/reminders.js
์ปจํธ๋กค๋ฌ ํ์ผ:backend/src/controllers/reminders.js
๋ชจ๋ธ ํ์ผ:backend/src/models/Reminder.js
| ๋ฉ์๋ | ๊ฒฝ๋ก | ์ค๋ช | ๊ถํ |
|---|---|---|---|
GET |
/api/reminders/upcoming |
24์๊ฐ ์ด๋ด ํตํฉ ๋ฆฌ๋ง์ธ๋ | isLoggedIn |
POST |
/api/reminders |
๋ ๋ฆฝ ๋ฆฌ๋ง์ธ๋ ์์ฑ | isLoggedIn |
PUT |
/api/reminders/:_id |
๋ฆฌ๋ง์ธ๋ ์์ | isLoggedIn (๋ณธ์ธ) |
PUT |
/api/reminders/:_id/complete |
์๋ฃ ์ฒ๋ฆฌ | isLoggedIn (๋ณธ์ธ) |
DELETE |
/api/reminders/:_id |
์ญ์ | isLoggedIn (๋ณธ์ธ) |
๋ฏธ์๋ฃ ๋
๋ฆฝ ๋ฆฌ๋ง์ธ๋(์์ผ๋ก 24์๊ฐ + ๊ณผ๊ฑฐ ๋ฏธํต๋ณด)์, reminder.enabled์ธ ์บ๋ฆฐ๋ ์ผ์ ์ ์์ ์๋ฆผ์ ํฉ์ณ ๋ฐํํฉ๋๋ค. ์ด๋ฒคํธ ๊ธฐ๋ณธ ๋ถ ๊ฐ์ ์ฌ์ฉ์ ์๋ฆผ ์ค์ ์ eventReminderDefault(๊ธฐ๋ณธ 15๋ถ)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
GET /api/reminders/upcoming
๊ถํ: isLoggedIn
ํตํฉ ๋ฐฐ์ด์ reminderTime ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐํํฉ๋๋ค. type์ "standalone" ๋๋ "event"์
๋๋ค.
{
"reminders": [
{
"type": "standalone",
"reminderTime": "2026-08-07T10:00:00.000Z",
"data": {
"_id": "507f1f77bcf86cd799439301",
"title": "์๋ด ์ค๋น",
"completed": false
}
},
{
"type": "event",
"reminderTime": "2026-08-07T11:45:00.000Z",
"data": {
"_id": "507f1f77bcf86cd799439401",
"title": "์ ์ฒดํ์",
"eventStart": "2026-08-07T12:00:00.000Z",
"minutesBefore": 15,
"isRecurring": false
}
}
]
}POST /api/reminders
| ํ๋ | ํ์ | ํ์ | ์ค๋ช |
|---|---|---|---|
title |
string |
O | ์ ๋ชฉ |
reminderTime |
string (ISO 8601) |
O | ์๋ฆผ ์๊ฐ |
memo |
string |
X | ๋ฉ๋ชจ |
reminderTime์ด ์ด๋ฏธ ์ง๋ฌ๊ฑฐ๋ 1๋ถ ์ด๋ด์ด๋ฉด ์ฆ์ reminder ์ ํ ์๋ฆผ์ ๋ฐ์กํ ์ ์์ต๋๋ค. ๊ทธ ์ธ์๋ ์ค์ผ์ค๋ฌ ํ์ ๋ฑ๋ก๋ฉ๋๋ค.
{
"reminder": {
"_id": "507f1f77bcf86cd799439301",
"title": "์๋ด ์ค๋น",
"memo": "",
"reminderTime": "2026-08-07T10:00:00.000Z",
"completed": false,
"notified": false
}
}PUT /api/reminders/:_id // title, memo, reminderTime
PUT /api/reminders/:_id/complete // completed: true, ํ์์ ์ ๊ฑฐ
DELETE /api/reminders/:_id
reminderTime ๋ณ๊ฒฝ ์ notified๊ฐ ์ด๊ธฐํ๋๊ณ ์ค์ผ์ค๋ฌ์ ๋ค์ ๋ฑ๋ก๋ฉ๋๋ค.