2026-01-18 18:54:27 +09:00
|
|
|
# API 명세
|
|
|
|
|
|
|
|
|
|
Base URL: `/api`
|
|
|
|
|
|
|
|
|
|
## 인증
|
|
|
|
|
|
|
|
|
|
### POST /auth/login
|
|
|
|
|
로그인 (JWT 토큰 발급)
|
|
|
|
|
|
|
|
|
|
### GET /auth/me
|
|
|
|
|
현재 사용자 정보 (인증 필요)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 멤버
|
|
|
|
|
|
|
|
|
|
### GET /members
|
|
|
|
|
멤버 목록 조회
|
|
|
|
|
|
|
|
|
|
### GET /members/:id
|
|
|
|
|
멤버 상세 조회
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 앨범
|
|
|
|
|
|
|
|
|
|
### GET /albums
|
|
|
|
|
앨범 목록 조회
|
|
|
|
|
|
|
|
|
|
### GET /albums/:id
|
|
|
|
|
앨범 상세 조회
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 일정
|
|
|
|
|
|
|
|
|
|
### GET /schedules
|
|
|
|
|
일정 조회
|
|
|
|
|
|
|
|
|
|
**Query Parameters:**
|
|
|
|
|
- `year`, `month` - 월별 조회 (필수, search 없을 때)
|
|
|
|
|
- `search` - 검색어 (Meilisearch 사용)
|
|
|
|
|
- `offset`, `limit` - 페이징
|
|
|
|
|
|
|
|
|
|
**월별 조회 응답:**
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"2026-01-18": {
|
|
|
|
|
"categories": [
|
|
|
|
|
{ "id": 2, "name": "유튜브", "color": "#ff0033", "count": 3 }
|
|
|
|
|
],
|
|
|
|
|
"schedules": [
|
|
|
|
|
{
|
|
|
|
|
"id": 123,
|
|
|
|
|
"title": "...",
|
|
|
|
|
"time": "19:00:00",
|
|
|
|
|
"category": { "id": 2, "name": "유튜브", "color": "#ff0033" },
|
2026-01-18 21:50:04 +09:00
|
|
|
"source": {
|
|
|
|
|
"name": "fromis_9",
|
|
|
|
|
"url": "https://www.youtube.com/watch?v=VIDEO_ID"
|
|
|
|
|
}
|
2026-01-18 18:54:27 +09:00
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2026-01-18 21:50:04 +09:00
|
|
|
**source 객체 (카테고리별):**
|
|
|
|
|
- YouTube (category_id=2): `{ name: "채널명", url: "https://www.youtube.com/..." }`
|
|
|
|
|
- X (category_id=3): `{ name: "X", url: "https://x.com/realfromis_9/status/..." }`
|
|
|
|
|
- 기타 카테고리: source 없음
|
|
|
|
|
|
2026-01-18 18:54:27 +09:00
|
|
|
**검색 응답:**
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"schedules": [
|
|
|
|
|
{
|
|
|
|
|
"id": 123,
|
|
|
|
|
"title": "...",
|
|
|
|
|
"datetime": "2026-01-18T19:00:00",
|
|
|
|
|
"category": { "id": 2, "name": "유튜브", "color": "#ff0033" },
|
2026-01-18 21:50:04 +09:00
|
|
|
"source": { "name": "fromis_9", "url": "https://..." },
|
2026-01-18 18:54:27 +09:00
|
|
|
"members": ["송하영"],
|
|
|
|
|
"_rankingScore": 0.95
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"total": 100,
|
|
|
|
|
"offset": 0,
|
|
|
|
|
"limit": 20,
|
|
|
|
|
"hasMore": true
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### GET /schedules/:id
|
|
|
|
|
일정 상세 조회
|
|
|
|
|
|
|
|
|
|
### POST /schedules/sync-search
|
|
|
|
|
Meilisearch 전체 동기화 (인증 필요)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 추천 검색어
|
|
|
|
|
|
|
|
|
|
### GET /schedules/suggestions
|
|
|
|
|
추천 검색어 조회
|
|
|
|
|
|
|
|
|
|
**Query Parameters:**
|
|
|
|
|
- `q` - 검색어 (2자 이상)
|
|
|
|
|
- `limit` - 결과 개수 (기본 10)
|
|
|
|
|
|
|
|
|
|
**응답:**
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"suggestions": ["송하영", "송하영 직캠", "하영"]
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 봇 상태
|
|
|
|
|
|
|
|
|
|
### GET /bots
|
|
|
|
|
봇 상태 조회
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 헬스 체크
|
|
|
|
|
|
|
|
|
|
### GET /health
|
|
|
|
|
서버 상태 확인
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## API 문서
|
|
|
|
|
|
|
|
|
|
### GET /docs
|
|
|
|
|
Scalar API Reference UI
|
|
|
|
|
|
|
|
|
|
### GET /docs/json
|
|
|
|
|
OpenAPI JSON 스펙
|