diff --git a/docs/API_SPEC.md b/docs/API_SPEC.md index 66f0f85..8550f13 100644 --- a/docs/API_SPEC.md +++ b/docs/API_SPEC.md @@ -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 --- @@ -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 @@ -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 사용 --- @@ -896,7 +836,7 @@ YYYY-MM-DDTHH:mm:ssZ --- -### 4.6 Judgement / Result Card +### 4.5 Judgement / Result Card --- @@ -996,7 +936,7 @@ YYYY-MM-DDTHH:mm:ssZ --- -### 4.7 Diary +### 4.6 Diary > 확정 필요: 경로 `/api/diary` (스캐폴딩 기준) vs `/api/diaries` (DIARY.md 기준) 최종 확정 필요. 아래 명세는 현재 스캐폴딩 폴더 기준으로 작성. @@ -1135,7 +1075,7 @@ YYYY-MM-DDTHH:mm:ssZ --- -### 4.8 Calendar +### 4.7 Calendar --- @@ -1177,7 +1117,7 @@ YYYY-MM-DDTHH:mm:ssZ --- -### 4.9 Statistics +### 4.8 Statistics --- @@ -1247,7 +1187,7 @@ YYYY-MM-DDTHH:mm:ssZ --- -### 4.10 Gift Recommendation +### 4.9 Gift Recommendation > **전체 확정 필요:** `GIFT.md §8`이 TODO 상태. 아래는 검토 메모 기반 초안이며 팀 확정 필요. @@ -1266,7 +1206,7 @@ YYYY-MM-DDTHH:mm:ssZ --- -### 4.11 Cron +### 4.10 Cron > **전체 확정 필요:** 아래는 스캐폴딩 폴더 기준 초안이며 세부 처리 정책은 팀 확정 필요. @@ -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/ @@ -1359,7 +1295,6 @@ src/app/api/ │ └── route.ts └── cleanup-drafts/ └── route.ts -``` --- @@ -1374,6 +1309,7 @@ src/app/api/ | 관리자 API | MVP 제외 | | 푸시 알림 API | MVP 제외 | | `statistics` 독립 화면 API | MVP 제외 (API는 유지, 독립 화면만 제외) | +| `/api/personal-analyses` | 단독 판결은 `disputes/{id}/judge` 로 처리. `personal-analyses` 도메인 제거 | ### 경로 충돌 / 확정 필요 목록 diff --git a/docs/PAGES.md b/docs/PAGES.md new file mode 100644 index 0000000..cb1e5f9 --- /dev/null +++ b/docs/PAGES.md @@ -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 전이 경로 확정 필요 +``` diff --git a/docs/db/STATUS_TRANSITION.md b/docs/db/STATUS_TRANSITION.md index ff9abb0..4bdba94 100644 --- a/docs/db/STATUS_TRANSITION.md +++ b/docs/db/STATUS_TRANSITION.md @@ -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` | 정상 종료 | diff --git a/docs/domains/DISPUTE.md b/docs/domains/DISPUTE.md index 784f93d..d1ec25d 100644 --- a/docs/domains/DISPUTE.md +++ b/docs/domains/DISPUTE.md @@ -7,8 +7,8 @@ ## 1. 도메인 목적 -1:1 조정 전환, 참여자(role_a / role_b), 양측 진술 작성, dispute_status 상태 관리를 담당한다. -상대방 참여 후 사건이 생성되며, 양측 진술 완료 후 AI 판결로 이어진다. +사건 생성, 참여자(role_a / role_b), 진술 작성, dispute_status 상태 관리를 담당한다. +방(room) 생성 시 dispute가 함께 생성되며, 진술 완료 후 혼자서 진행 또는 상대방 초대를 통해 AI 판결로 이어진다. --- @@ -54,10 +54,12 @@ TODO: 비기능 요구사항 정의서 확인 후 작성 ## 5. 포함 기능 ```txt -- 상대방 참여 (초대 링크 기반) -- 1:1 조정 전환 (role_a / role_b 확정) -- 양측 진술 작성 -- 진술 종료 +- 방 생성 시 dispute 함께 생성 (dispute_status: draft) +- role_a 진술 작성 (먼저 작성) +- 진술저장 후 혼자서 진행 / 상대방 초대 선택 +- 혼자서 진행: role_a 진술만으로 AI 단독 판결 +- 상대방 초대: 초대 링크 발급 → role_b 참여 → role_b 진술 작성 → AI 1:1 판결 +- 진술 수정 (진술저장 이후 사건조회에서 본인 진술 카드 클릭 시 가능) - dispute_status 상태 관리 - 사건 종료 / 만료 / 삭제 - 비식별 처리 @@ -68,8 +70,7 @@ TODO: 비기능 요구사항 정의서 확인 후 작성 ## 6. 제외 기능 ```txt -- AI 대화방 없이 바로 1:1 사건 생성 (금지) -- 단독 판결 (MVP 제외) +- AI 대화방(room) 없이 바로 사건 생성 (금지) - 동일 사용자의 role_a / role_b 동시 보유 (금지) ``` @@ -78,10 +79,19 @@ TODO: 비기능 요구사항 정의서 확인 후 작성 ## 7. 관련 화면 ```txt -src/app/(page)/disputes/ -src/app/(page)/join/ +src/app/(page)/disputes/[id]/ 사건조회 (진술 탭 / 판결 탭 / 유형 탭) +src/app/(page)/disputes/[id]/statement 사건작성 (role_a / role_b 진술 작성, 수정) +src/app/(page)/join/ 초대 링크 참여 (role_b 진입) ``` +판결 탭: +- 혼자서 진행(단독): 텍스트 판결결과만 제공 (프로필 사진 / 그래프 없음) +- 상대방 초대(1:1): 프로필 사진 + 그래프 + 텍스트 판결결과 제공 + +유형 탭: +- AI 도출 결과 유형 캐릭터 이미지 및 설명 +- 공유하기 / 결과 다운받기 버튼 + --- ## 8. 관련 API @@ -167,11 +177,15 @@ closed / expired / deleted ## 14. Claude 작업 시 주의사항 ```txt -- AI 대화방 단계에서는 role_a / role_b 확정 로직 구현 금지 +- dispute는 room 생성 시 함께 생성. AI 대화방(room) 없이 바로 dispute 생성 금지 +- role_a가 먼저 진술 작성 → 진술저장 → 혼자서 진행 or 상대방 초대 선택 +- role_b는 초대 참여 후 별도로 진술 작성 (role_a와 동시 작성 아님) +- 진술 수정은 진술저장 이후 사건조회에서 본인 진술 카드 클릭으로 가능 - 1:1 전환 시 생성자를 role_a로 확정, 상대방을 role_b로 확정 - 동일 사용자가 role_a / role_b 동시 보유하는 로직 구현 금지 - 하나의 role에 진술 1개만 허용 - 진술 종료 / 초대 참여 / 삭제 요청은 중복 방지 처리 필요 - jailed 상태명 사용 금지 - 상태 전이 임의 변경 금지 (팀 승인 필요) +- 혼자서 진행(단독) 시 dispute_status 전이 경로는 팀 확정 필요 ``` diff --git a/docs/domains/JUDGEMENT.md b/docs/domains/JUDGEMENT.md index 42b791b..836148e 100644 --- a/docs/domains/JUDGEMENT.md +++ b/docs/domains/JUDGEMENT.md @@ -90,9 +90,17 @@ TODO: 비기능 요구사항 정의서 확인 후 작성 ## 7. 관련 화면 ```txt -src/app/(page)/disputes/ 판결 결과 확인 +src/app/(page)/disputes/[id] 사건조회 — 판결 탭 / 유형 탭 ``` +판결 탭: +- 혼자서 진행(단독): 텍스트 판결결과만 제공 (프로필 사진 / 그래프 없음) +- 상대방 초대(1:1): 프로필 사진 + 그래프 + 텍스트 판결결과 제공 + +유형 탭: +- AI 도출 결과 유형 캐릭터 이미지 및 설명 +- 공유하기 / 결과 다운받기 버튼 + --- ## 8. 관련 API diff --git a/docs/domains/PERSONAL_ANALYSIS.md b/docs/domains/PERSONAL_ANALYSIS.md deleted file mode 100644 index 08fec10..0000000 --- a/docs/domains/PERSONAL_ANALYSIS.md +++ /dev/null @@ -1,126 +0,0 @@ -# PERSONAL_ANALYSIS Domain Document - -> 작성자: TODO: 담당자 확인 필요 -> 최종 수정일: 2026-06-15 - ---- - -## 1. 도메인 목적 - -AI 대화 기반 개인 갈등 분석 흐름을 담당한다. -상대방 참여 전 단계에서 AI와의 대화를 통해 갈등 정리, 감정 정리, 대화 방향 조언을 제공한다. - ---- - -## 2. 담당자 - -```txt -FE: TODO: 담당자 확인 필요 -BE: TODO: 담당자 확인 필요 -``` - ---- - -## 3. 관련 기능 요구사항 ID - -```txt -TODO: 기능 요구사항 정의서 확인 후 작성 -``` - ---- - -## 4. 관련 비기능 요구사항 ID - -```txt -TODO: 비기능 요구사항 정의서 확인 후 작성 -``` - ---- - -## 5. 포함 기능 - -```txt -- AI와 갈등 상황 정리 대화 -- 감정 정리 지원 -- 대화 방향 조언 제공 -- 개인 분석 결과 조회 (담당자 확인 필요) -``` - ---- - -## 6. 제외 기능 - -```txt -- 상대방 없는 단독 판결 (MVP 제외) -- AI 대화방 단계에서 판결 점수 생성 (금지) -- A/B 공감 지수 (구현 금지) -- A/B 소통 태도 점수 (구현 금지) -``` - ---- - -## 7. 관련 화면 - -```txt -src/app/(page)/personal-analyses/ -``` - ---- - -## 8. 관련 API - -```txt -TODO: API 명세서 확정 후 작성 -``` - ---- - -## 9. 관련 테이블 - -```txt -TODO: ERD / PRISMA_MAPPING 확정 후 작성 -``` - ---- - -## 10. 상태 전이 - -개인 분석 단계는 room_mode = ai_chat 상태에서 이루어진다. -별도 상태 전이 없음. 기준: `docs/db/STATUS_TRANSITION.md` - ---- - -## 11. 권한 규칙 - -```txt -개인 분석 조회: creator_user_id 기준 -타인 데이터 접근 금지 -``` - ---- - -## 12. UI 연결 지점 - -```txt -도메인 훅: src/domains/personal-analysis/ -AI 대화: ROOM 도메인과 연계 -``` - ---- - -## 13. 예외 상황 - -```txt -- Gemini API 실패 시 재시도 / 오류 안내 -- 대화 중 연결 끊김 처리 기준 확인 필요 -``` - ---- - -## 14. Claude 작업 시 주의사항 - -```txt -- 상대방 없는 단독 판결 구현 금지 (MVP 제외) -- AI 대화방 단계에서 판결 점수 생성 로직 구현 금지 -- 이 도메인 상세 설계는 기능 요구사항 정의서 확인 후 담당자가 보강 -``` diff --git a/docs/domains/ROOM.md b/docs/domains/ROOM.md index 0fe0a3a..0b0bf2b 100644 --- a/docs/domains/ROOM.md +++ b/docs/domains/ROOM.md @@ -7,8 +7,8 @@ ## 1. 도메인 목적 -AI 대화방 생성, AI 대화, 초대 링크 발급, room_mode 상태 관리를 담당한다. -모든 갈등 조정은 AI 대화방에서 시작하며, 상대방 초대 전까지 AI와의 갈등 정리 단계를 유지한다. +AI 대화방 생성, 자신의 상황 입력 및 AI 분석 제공, 초대 링크 발급, room_mode 상태 관리를 담당한다. +모든 갈등 조정은 AI 대화방에서 시작하며, 사용자가 텍스트로 입력한 상황을 AI가 정리하고 의견을 제공한다. --- @@ -46,8 +46,9 @@ TODO: 비기능 요구사항 정의서 확인 후 작성 ```txt - AI 대화방 생성 (카테고리 선택 포함) -- AI와 갈등 상황 정리 대화 -- 초대 링크 발급 +- 자신의 상황 텍스트 입력 +- AI가 입력 내용 기반으로 정리 및 의견 제공 (채팅형 아님) +- 진술저장 후 초대 링크 발급 (상대방 초대 선택 시) - room_mode 상태 관리 - 방 목록 / 사건기록 조회 - 방 종료 / 만료 / 삭제 처리 @@ -58,9 +59,9 @@ TODO: 비기능 요구사항 정의서 확인 후 작성 ## 6. 제외 기능 ```txt -- AI 대화방 없이 바로 1:1 사건 생성 (금지) +- AI 대화방 없이 바로 사건 생성 (금지) - AI 대화방 단계의 판결 점수 생성 (금지) -- 상대방 없는 단독 판결 (MVP 제외) +- 채팅형 AI 대화 인터페이스 (입력 → AI 분석 구조로 대체) ``` --- @@ -68,11 +69,14 @@ TODO: 비기능 요구사항 정의서 확인 후 작성 ## 7. 관련 화면 ```txt -src/app/(page)/home/ -src/app/(page)/rooms/ -src/app/(page)/join/ +src/app/(page)/home/ 홈 (새 사건 생성 진입, 진행중인 사건 목록) +src/app/(page)/rooms/[id] AI 대화방 (상황 입력 + AI 분석 + 초대 링크 발급) ``` +홈의 진행중인 사건 클릭 시 분기: +- room_mode = ai_chat / invite_ready → rooms/[id] +- room_mode = one_to_one 이후 → disputes/[id] + --- ## 8. 관련 API