-
Notifications
You must be signed in to change notification settings - Fork 0
BE Request Intro Notes
작성: 2026-09-10 · FE 담당: @junseo2323 대상:
ditto-develop/ditto-server관련: BE 개발 요청서 §5 (타인 프로필 보조) · FE 브랜치feat/s3-migration요청 1건 · [확장] · P0 — 매칭 주 플로우가 막혀 있습니다.
| # | 항목 | 태그 | 우선 | 지금 상태 |
|---|---|---|---|---|
| 1 |
GET /api/v1/users/{id}/intro-notes 를 이번 주 매칭 후보에게도 열어 주세요 |
확장 | P0 | 성사 전 403(0003) → 소개노트 카드가 빈 채로 뜸 |
경로·스키마 변경은 없습니다. 열람 조건 한 줄만 넓혀 주시면 됩니다.
화면: Figma 3.1 매칭 & 프로필 → 3.2 소개노트 (node-id 673-12674)
FE 경로: /profile/{id}?quizSetId={n}&state=before_request (매칭 결과 → 후보 카드 탭)
이 화면은 대화 신청 여부를 정하는 화면입니다. 이번 주 후보의 소개노트 3문항
(무작위 2문항 + Q10. 나를 한 줄로 표현한다면?)을 보여 주고, 그 아래에
"대화가 시작되면 더 많은 질문과 답변을 볼 수 있어요"를 붙인 뒤 [대화 신청하기] 를 받습니다.
그런데 현재 계약은 이렇습니다.
GET /api/v1/users/{id}/intro-notes
→ "매칭 성사 또는 같은 그룹 채팅에 참여한 사용자의 소개 노트를 조회합니다."
이 화면은 정의상 성사 전입니다. 그래서 후보 전원이 403 / 0003이고,
지금 계약대로면 이 화면은 영원히 빈 카드입니다.
소개노트를 보고 신청을 결정하는 것이 제품의 핵심인데, 그 판단 근거가 내려오지 않습니다.
성사 후(
state=chat_started, 그룹 멤버) 전체 공개는 지금 계약 그대로면 됩니다. 문제는 성사 전 구간뿐입니다.
GET /api/v1/users/{id}/intro-notes 의 열람 조건에 아래를 추가해 주세요.
이번 주 매칭 후보로 서로에게 노출된 상대 (=
GET /api/v1/matches/1on1응답candidates[].userId, 그룹은 그룹 매칭 대상자)
응답 스키마는 그대로입니다.
FE는 성사 전에 3문항만 그립니다(나머지는 화면에서 가립니다). 그래서 둘 중 아무 쪽이나 괜찮습니다.
| 안 | 내용 | BE 작업 | FE 작업 |
|---|---|---|---|
| (a) | 전량 내려주기 | 권한 조건만 수정 | 없음 (현재 구현 그대로) |
| (b) | 성사 전에는 3문항만 내려주기 | 권한 + 응답 축소 | 없음 |
(b)로 가실 경우 questionCode: "one-word"(Q10)는 반드시 포함해 주세요.
화면 마지막 칸이 Q10 고정이고, 나머지 2개는 무엇이 오든 상관없습니다.
프라이버시 관점에서 (b)가 안전하다고 보시면 (b)로 가셔도 됩니다. 어느 쪽인지만 알려 주세요.
-
GET /api/v1/users/{id}/profile도 같은 이유로 성사 전 403입니다. FE는 매칭 후보 목록으로 폴백해 화면을 채우고 있어서(useUserProfile) 직업·관심사·평점이 빈 채로 뜹니다. 같이 열어 주시면 이 폴백을 지울 수 있습니다. 다만 우선순위는 소개노트가 훨씬 높습니다. -
GET /api/v1/users/{id}/ratings가 성사 전 403인 것은 FE도 의도된 동작으로 보고 있습니다. 이건 열어 달라는 요청이 아닙니다.
지금은 403을 조용히 삼켜서(IntroNoteContainer) 아무 설명 없이 빈 카드가 뜹니다.
BE 작업이 어렵거나 뒤로 밀리면, FE에서 "대화가 시작되면 소개노트를 볼 수 있어요" 같은
빈 상태 문구로 바꾸겠습니다.
다만 그 경우 사용자는 소개노트를 못 본 채로 대화를 신청하게 됩니다. 남는 판단 근거가 닉네임·나이·지역·퀴즈 일치율뿐이라, 매칭 품질이 그만큼 떨어집니다.
- 매칭 후보에게
intro-notes를 열어 줄 수 있습니까? (예 / 아니오) - 연다면 (a) 전량 / (b) 3문항(Q10 포함) 중 어느 쪽입니까?
- "후보" 판정 기준은 무엇입니까? (이번 주
quizSetId기준인지, 매칭 기간이 지나면 다시 닫히는지) - 그룹 매칭 대상자도 같은 규칙으로 열립니까?
-
GET /users/{id}/profile도 함께 여실 수 있습니까? (선택) - 예상 일정
| 무엇 | 파일 |
|---|---|
| 호출부 |
src/features/profile/api/profileApi.ts → getUserIntroNotes()
|
| 클라이언트 |
src/shared/lib/api/externalApi.ts → getExternalUserIntroNotes()
|
| 화면 컨테이너 |
src/features/profile/containers/IntroNoteContainer.tsx (403을 삼키는 지점) |
| 3문항 선택 로직 |
src/features/profile/ui/ProfileIntroView.tsx → selectIntroNotePreview()
|
| 문항 정의(10개) | src/features/profile/model/introNotes.ts |
| E2E |
cypress/e2e/matching-profile/02-intro-note.cy.ts (현재 200으로 목업 중이라 통과합니다) |