Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 13 additions & 77 deletions docs/API_SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -415,68 +415,7 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.3 Personal Analysis (단독 판결)

> **상세 구조 확정 필요:** `PERSONAL_ANALYSIS.md §8`이 TODO 상태. 요청/응답 필드 구조 미확정. 아래는 MVP 포함 확정 기준 초안.

- **Base Endpoint:** `/api/personal-analyses`
- **설명:** 상대방 초대 없이 AI가 단독으로 갈등을 분석하고 판결을 생성하는 흐름.
- **연관 도메인:** ROOM 도메인과 연계 (`room_mode = ai_chat` 단계에서 시작)
- **조회 권한:** `creator_user_id` 기준

---

#### `POST /api/personal-analyses`

- **인증:** 🔒
- **설명:** AI 단독 판결을 요청한다. 방이 `ai_chat` 상태이며 상대방 미초대 상태에서만 가능.
- **Request Body:**

```json
{
"roomId": "uuid"
}
```

- **Response 201:**

```json
{
"success": true,
"data": {
"analysisId": "uuid",
"status": "analyzing"
},
"error": null
}
```

- **Error Code:**

| 코드 | HTTP | 설명 |
|------|------|------|
| `FORBIDDEN` | 403 | 생성자 아님 |
| `INVALID_STATUS` | 422 | ai_chat 상태 아님 또는 상대방 참여 상태 |
| `CONFLICT` | 409 | 이미 분석 진행 중 또는 완료 |
| `AI_FAILURE` | 500 | Gemini API 호출 실패 |
| `AI_PARSE_FAILURE` | 500 | Gemini 응답 파싱 실패 |
| `AI_TIMEOUT` | 500 | Gemini API 타임아웃 |

- **확정 필요:**
- 단독 판결 결과 포함 필드 범위 (PERSONAL_ANALYSIS.md §8 — TODO)
- 1:1 판결과 결과 구조 공유 여부 (verdictScoreA/B 포함 여부 등)

---

#### `GET /api/personal-analyses/{analysisId}`

- **인증:** 🔒
- **설명:** 단독 판결 결과를 조회한다.
- **확정 필요:** 응답 필드 구조 전체 (PERSONAL_ANALYSIS.md §8 — TODO)

---

### 4.4 Room / Invite / AI Chat
### 4.3 Room / Invite / AI Chat

---

Expand Down Expand Up @@ -713,14 +652,14 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.5 Dispute / Statement
### 4.4 Dispute / Statement

---

#### `POST /api/disputes`

- **인증:** 🔒
- **설명:** 상대방 참여 완료 후 1:1 조정 사건을 생성한다. 생성자를 `role_a`로 확정한다.
- **설명:** 방(room) 생성 시 사건을 함께 생성한다. 생성자를 `role_a`로 확정한다. 혼자서 진행(단독 판결)과 상대방 초대(1:1 판결) 모두 이 dispute를 기반으로 처리한다.
- **Request Body:**

```json
Expand Down Expand Up @@ -756,10 +695,11 @@ YYYY-MM-DDTHH:mm:ssZ
| `CONFLICT` | 409 | 해당 roomId에 dispute 이미 존재 |

- **처리 정책:**
- AI 대화방 없이 바로 사건 생성 금지 (CLAUDE.md §14)
- `room_mode = one_to_one` 상태에서만 생성 가능
- AI 대화방(room) 없이 바로 사건 생성 금지 (CLAUDE.md §14)
- room 생성 시 dispute 함께 생성 (dispute_status: draft)
- 생성자를 `role_a`로 확정
- 동일 `roomId`에 dispute 중복 생성 불가
- 혼자서 진행 / 상대방 초대 모두 동일 dispute 사용

---

Expand Down Expand Up @@ -896,7 +836,7 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.6 Judgement / Result Card
### 4.5 Judgement / Result Card

---

Expand Down Expand Up @@ -996,7 +936,7 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.7 Diary
### 4.6 Diary

> 확정 필요: 경로 `/api/diary` (스캐폴딩 기준) vs `/api/diaries` (DIARY.md 기준) 최종 확정 필요. 아래 명세는 현재 스캐폴딩 폴더 기준으로 작성.

Expand Down Expand Up @@ -1135,7 +1075,7 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.8 Calendar
### 4.7 Calendar

---

Expand Down Expand Up @@ -1177,7 +1117,7 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.9 Statistics
### 4.8 Statistics

---

Expand Down Expand Up @@ -1247,7 +1187,7 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.10 Gift Recommendation
### 4.9 Gift Recommendation

> **전체 확정 필요:** `GIFT.md §8`이 TODO 상태. 아래는 검토 메모 기반 초안이며 팀 확정 필요.

Expand All @@ -1266,7 +1206,7 @@ YYYY-MM-DDTHH:mm:ssZ

---

### 4.11 Cron
### 4.10 Cron

> **전체 확정 필요:** 아래는 스캐폴딩 폴더 기준 초안이며 세부 처리 정책은 팀 확정 필요.

Expand Down Expand Up @@ -1347,10 +1287,6 @@ src/app/api/
│ │ └── route.ts # GET
│ └── top-types/
│ └── route.ts # GET — 확정 필요: /top-types vs /top5
├── personal-analyses/ # 단독 판결 — 상세 구조 확정 필요
│ ├── route.ts # POST 단독 판결 요청
│ └── [analysisId]/
│ └── route.ts # GET 단독 판결 결과
├── statements/ # ※ disputes 하위로 통합 여부 확정 필요
└── cron/
├── expire-invitations/
Expand All @@ -1359,7 +1295,6 @@ src/app/api/
│ └── route.ts
└── cleanup-drafts/
└── route.ts
```

---

Expand All @@ -1374,6 +1309,7 @@ src/app/api/
| 관리자 API | MVP 제외 |
| 푸시 알림 API | MVP 제외 |
| `statistics` 독립 화면 API | MVP 제외 (API는 유지, 독립 화면만 제외) |
| `/api/personal-analyses` | 단독 판결은 `disputes/{id}/judge` 로 처리. `personal-analyses` 도메인 제거 |

### 경로 충돌 / 확정 필요 목록

Expand Down
147 changes: 147 additions & 0 deletions docs/PAGES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# PAGES.md

TALKY-OWL MVP 전체 페이지 목록

> 기준: 피그마 디자인 + docs/domains/*.md + docs/API_SPEC.md
> 최종 수정일: 2026-06-17

---

## 1. 전체 흐름 요약

```txt
홈 (home/)
↓ 새 사건 + → 카테고리 선택
AI 대화방 (rooms/[roomId])
↓ 진술저장 → 모달: 혼자서 진행 / 상대방 초대
├── 혼자서 진행 → disputes/[id] (단독 판결)
└── 상대방 초대 → 초대 링크 발급 → join/ → disputes/[id]/statement (role_b)
사건작성 (disputes/[id]/statement)
↓ 진술저장
사건조회 (disputes/[id])
├── 진술 탭: 양측 진술 확인 (카드 클릭 시 본인 진술 수정 가능)
├── 판결 탭: 판결 결과 (1인: 텍스트만 / 2인: 프로필+그래프+텍스트)
└── 유형 탭: 결과 유형 캐릭터 + 공유/다운로드
```

---

## 2. 페이지 목록

### 인증

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/landing` | 랜딩 | 서비스 소개 | 공개 |
| `/login` | 로그인 | 카카오 로그인 | 공개 |
| `/terms` | 약관 동의 | 서비스 이용 약관 (카카오 로그인 완료 시 동의 간주) | 공개 |

---

### 메인

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/home` | 홈 | 새 사건 생성 진입, 진행중인 사건 목록, 요약 통계 | 🔒 |

홈의 진행중인 사건 클릭 시 분기:
- `room_mode = ai_chat / invite_ready` → `rooms/[roomId]`
- `room_mode = one_to_one` 이후 → `disputes/[disputeId]`

---

### AI 대화방 (Room)

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/rooms/[roomId]` | AI 대화방 | 상황 텍스트 입력 + AI 정리 및 의견 제공 + 초대 링크 발급 | 🔒 |

---

### 초대 참여

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/join` | 초대 참여 | 초대 링크로 진입 → role_b 확정 | 공개 → 로그인 필요 |

---

### 사건 (Dispute)

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/disputes/[disputeId]` | 사건조회 | 진술 탭 / 판결 탭 / 유형 탭 | 🔒 |
| `/disputes/[disputeId]/statement` | 사건작성 | role_a / role_b 진술 작성 및 수정 | 🔒 |

#### 사건조회 탭 상세

| 탭 | 내용 |
|----|------|
| 진술 탭 | 양측 진술 카드 표시. 본인 진술 카드 클릭 시 수정 가능 |
| 판결 탭 (혼자서 진행) | 텍스트 판결결과만 제공. 프로필 사진 / 그래프 없음 |
| 판결 탭 (상대방 초대) | 프로필 사진 + 그래프 + 텍스트 판결결과 제공 |
| 유형 탭 | AI 도출 결과 유형 캐릭터 이미지 및 설명. 공유하기 / 결과 다운받기 버튼 |

---

### 감정일기 (Diary)

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/diary` | 감정일기 (하단 탭) | 일기 목록 | 🔒 |
| `/diary/[diaryId]` | 일기 상세 | 일기 상세 조회 / 수정 / 삭제 | 🔒 |

---

### 달력 (Calendar)

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/calendar` | 달력 (하단 탭) | 월별 사건/일기 기록 마킹 | 🔒 |

---

### 사건기록 (Records)

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/records` | 사건기록 (하단 탭) | 전체 사건 목록 조회 | 🔒 |

---

### 마이페이지 (MyPage)

| 경로 | 화면명 | 설명 | 인증 |
|------|--------|------|------|
| `/mypage` | 마이페이지 (하단 탭) | 프로필, 요약 통계, 설정, 회원탈퇴 | 🔒 |

---

## 3. 하단 탭 구성

| 탭 | 경로 | 아이콘 |
|----|------|--------|
| 홈 | `/home` | Home (MUI MD2) |
| 사건기록 | `/records` | MenuBook (MUI MD2) |
| 일기 | `/diary` | CalendarMonth (MUI MD2) |
| 마이페이지 | `/mypage` | Person (MUI MD2) |

---

## 4. 제외된 페이지

| 경로 | 이유 |
|------|------|
| `/personal-analyses` | 피그마 미존재. 단독 판결은 `disputes/[id]`로 통합 처리 |
| `/statistics` | MVP 제외 (독립 화면 없음. 홈/마이페이지 내 컴포넌트로만 사용) |
| `/shop` | v2.0 예정 |
| `/points` | v2.0 예정 |

---

## 5. 확정 필요 항목

```txt
- /join 페이지 비로그인 사용자 접근 시 처리 흐름 (로그인 후 자동 참여 여부)
- 혼자서 진행(단독) 시 dispute_status 전이 경로 확정 필요
```
8 changes: 4 additions & 4 deletions docs/db/STATUS_TRANSITION.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ closed / expired / deleted

| 상태 | 설명 |
|------|------|
| `draft` | 진술 초안 작성 단계 |
| `waiting_opponent` | 상대방 참여 대기 |
| `opponent_joined` | 상대방 참여 완료, 진술 작성 가능 |
| `both_submitted` | 양측 진술 완료, AI 판결 요청 가능 |
| `draft` | 방(room) 생성 시 dispute 함께 생성. role_a 진술 작성 대기 단계 |
| `waiting_opponent` | role_a 진술 완료 후 상대방 초대 선택. 상대방 참여 대기 |
| `opponent_joined` | role_b 참여 완료. role_b 진술 작성 가능 |
| `both_submitted` | 양측 진술 완료. AI 판결 요청 가능 |
| `judging` | AI 판결 처리 중 |
| `judged` | AI 판결 완료 |
| `closed` | 정상 종료 |
Expand Down
Loading