Skip to content

[TMT-268] feat: 사진 없는 리뷰도 리뷰로 성립 — C4에서 사진 필수 제거 - #86

Open
mingdodev wants to merge 1 commit into
mainfrom
feat/TMT-268-photoless-review
Open

[TMT-268] feat: 사진 없는 리뷰도 리뷰로 성립 — C4에서 사진 필수 제거#86
mingdodev wants to merge 1 commit into
mainfrom
feat/TMT-268-photoless-review

Conversation

@mingdodev

@mingdodev mingdodev commented Sep 1, 2026

Copy link
Copy Markdown
Member

Related Issue

Why

기획 결정으로 정책이 바뀌었습니다. 사진을 강제하면 사진이 없다는 이유로 리뷰가 성립하지 않고, 티켓도 못 받아 그룹 가입 흐름 전체가 막힙니다. QA에서 올라온 "이미지 미포함 리뷰 티켓 미지급"은 코드 버그가 아니라 규칙대로 동작한 것이라, 코드가 아니라 규칙부터 고쳤습니다.

What

완성도 판정(C4)에서 사진 1장 이상 조건을 뺐습니다. 동행 태그·좋은 점 태그·별점·본문 넷을 채우면 사진이 0장이어도 Review가 생기고 티켓 1장이 나갑니다. 사진 상한 3장(M3)은 그대로입니다.

문서를 같은 변경에서 갱신했습니다.

How

SaveRules.satisfiesReviewCriteria에서 photoCount 파라미터를 통째로 없앴습니다. 조건만 빼고 인자를 남기면 호출부가 계속 사진 수를 세어 넘기고, 판정과 무관한 값이 판정 함수 시그니처에 남습니다.

Notes for Reviewer

  • 검증한 것: ./gradlew build 통과(ktlint 포함). 사진 없이 나머지를 채우면 리뷰·티켓·집계가 나가는 테스트를 추가했습니다. 못 한 것: 실제 앱으로 사진 없이 작성 완료해보는 확인은 안 했습니다
  • SaveRules.satisfiesReviewCriteria의 시그니처가 바뀌어 [TMT-225] feat: 이어쓰기·임시저장 삭제·내 저장 조회·리뷰 폼 설정 실구현 — save mock 제거 #69(TMT-225 이어쓰기)와 세미 충돌합니다. 그쪽 SaveUpdateServicephotoCount = ...로 부르고 있어서, 이 PR이 먼저 머지되면 [TMT-225] feat: 이어쓰기·임시저장 삭제·내 저장 조회·리뷰 폼 설정 실구현 — save mock 제거 #69 리베이스 때 한 줄을 지워야 컴파일됩니다
  • 조회 쪽은 사진 0장을 이미 견딥니다ReviewCardComposer가 사진을 별도 조회해 orEmpty()로 합치고, PlaceQueryRepository·PlaceSearchRepositoryJOIN save_photo는 P7 대표 사진 파생이라 사진 있는 리뷰만 골라야 하는 자리입니다. 이 PR로 깨지는 조회 경로는 없는 것으로 봤습니다
  • 응답 스키마는 안 바뀌지만 사진 0장인 리뷰가 화면에 나옵니다. 빈 사진 자리를 어떻게 그릴지는 Figma에 이미 설계돼 있을 수 있어 확인이 필요합니다 — 없다면 명세 §8-8 항목으로 남습니다

Prompt Log

  • 기획 결정(사진 없는 리뷰도 리뷰로 보고 티켓 지급)과 반영 범위(도메인 규칙 + 명세 + 구현)를 개발자가 전달, 에이전트가 반영
  • QA 티켓(TMT-268)이 버그인지 먼저 판정 — SaveRules가 C4대로 동작하고 있어 규칙 변경이지 버그 수정이 아니라고 보고, 문서를 먼저 고치고 코드를 뒤에 맞추는 순서로 진행
  • 에이전트가 photoCount 인자를 남긴 채 조건만 빼는 안을 냈으나, 판정과 무관한 값이 시그니처에 남아 개발자가 파라미터째 제거하는 쪽으로 정정
  • 에이전트가 사진 0장 파급으로 save_photoLEFT JOIN으로 바꿔야 한다고 명세에 적었는데, 개발자 지적으로 코드를 확인하니 조회부는 이미 사진을 별도 조회해 합치고 있었고 P7 쪽 INNER JOIN은 의도된 것이었다 — 근거 없는 주의였어서 문서에서 걷어낼 예정

@wnsvy607 wnsvy607 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

규칙 변경을 "버그가 아니다"로 먼저 판정하고 문서(도메인 C4-1·R10, F·G·I §4-1, 변경 이력)를 코드보다 앞에 고친 순서가 CLAUDE.md 규칙 그대로라 좋았습니다. photoCount 인자를 통째로 뺀 판단도 맞습니다 — 판정과 무관한 값이 시그니처에 남으면 다음 사람이 다시 넣습니다. main의 호출부는 SaveCreationService 하나뿐인 것 확인했고, 사진 0장 테스트(리뷰·티켓·집계까지 단언)도 충분합니다. approve합니다.

[q] SaveMockController.kt:243의 mock 판정(satisfiesReviewCriteria(request))은 별도 구현이라 이 PR로 안 바뀌어서, 머지 직후엔 mock은 사진 필수·실구현은 선택으로 갈립니다. #69가 이 컨트롤러를 지우니 순서대로 머지되면 자연히 해소되는데, #86이 #69보다 먼저 나가는 기간엔 FE가 mock에서 사진 없이 저장하면 여전히 미완성으로 떨어집니다. 짧은 과도기라 그대로 두되 알고는 있으면 좋겠습니다.

[q] 참고로 제 #84 시드 검증 6번(C4 사진 필수)은 이 변경을 예상해 시드 범위로 좁혀놨습니다 — 머지 순서 상관없이 안전합니다.

@mingdodev

Copy link
Copy Markdown
Member Author

[q] SaveMockController.kt:243의 mock 판정(satisfiesReviewCriteria(request))은 별도 구현이라 이 PR로 안 바뀌어서, 머지 직후엔 mock은 사진 필수·실구현은 선택으로 갈립니다. #69가 이 컨트롤러를 지우니 순서대로 머지되면 자연히 해소되는데, #86이 #69보다 먼저 나가는 기간엔 FE가 mock에서 사진 없이 저장하면 여전히 미완성으로 떨어집니다. 짧은 과도기라 그대로 두되 알고는 있으면 좋겠습니다.

[q] 참고로 제 #84 시드 검증 6번(C4 사진 필수)은 이 변경을 예상해 시드 범위로 좁혀놨습니다 — 머지 순서 상관없이 안전합니다.

69가 무조건 86보다 먼저 머지되어야 한다 생각합니다. 또한 이는 앞으로의 정책 변경이기 때문에 DB 시드 검증 역시 변경된 정책에 따라야 한다 생각하는데, 혹시 검증에서 달라지는 부분이 있을까요? (예. 사진만 없으면 티켓이 나가야 하지만 티켓이 나가지 않음) @wnsvy607 한번만 확인 부탁드립니다! 아님 제가 이따 확인해서 여기서 고쳐둘게요

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants