POST /api/v1/reports
신고 접수. 무엇을 신고하든 유저/챌린지 둘 중 하나로 들어온다. 사유 선택(셀렉트)만 받고 자유 텍스트는 받지 않는다.
<aside> 🔄
2026-08-26 개편 반영 — ① detail(자유 텍스트) 폐기 ② LLM 허위 신고 필터 폐기 — 접수 게이트 없음 ③ 누적 카운트 전면 폐지(행위 5명 강퇴 · 유저 10명 확인 · 챌린지 10명 가입 차단) ④ 방장 알림 폐기 ⑤ 재신고는 구조적으로 불가하므로 duplicate 플래그 폐기 ⑥ 용어 블랙리스트 → 차단.
</aside>
동작 순서 — 단일 동기 트랜잭션이다.
비동기 단계는 없다. LLM 호출도, 카운트 재계산도, 자동 강퇴 트리거도 없다.
기타 규칙:
duplicate 같은 플래그도 내려주지 않는다 — 신고자에게는 정상 접수로 보여야 한다.403 REPORT_SUSPENDED.| Column | Type | Description |
|---|---|---|
| targetType | String | USER / CHALLENGE |
| targetUserId | String / null | USER일 때 필수 |
| targetChallengeId | String / null | CHALLENGE일 때 필수. USER 신고여도 행위 신고면 발생 챌린지 필수 — 카운트 집계용이 아니라 컨텍스트 스냅샷에 방 정보를 담기 위함이다 |
| contextType | String / null | 신고 진입점 — PROFILE(행위·닉네임·이미지) / NOTICE / COMMENT / CHALLENGE_DETAIL. 스냅샷에 어떤 화면에서 신고했는지를 남기는 용도다(구 방장 알림 분기용 → 폐기). NOTICE·COMMENT는 공지·댓글 기능과 함께 Phase 2 |
| contextId | String / null | 공지·댓글 신고 시 해당 글 ID — 스냅샷 대상 지정용. 처리는 작성자 단위 유저 신고다 |
| reason | String | 유저: CHEATING_SUSPECT / INAPPROPRIATE / SPAM_AD / ETC · 챌린지: INAPPROPRIATE / SPAM_AD / ETC — 사유별 처리 차이 없음. 운영자 검토 시 분류 힌트로만 쓴다 |
~~detail~~ — 폐기(2026-08-26). 자유 텍스트 필드는 받지 않는다. 유저가 성실히 적어주지 않아 판단 재료로 신뢰할 수 없고, 텍스트를 읽던 LLM 접수 필터도 함께 폐지됐다. 클라이언트에서 입력란 자체를 제거한다.json
{"targetType":"USER",
"targetUserId":"u_55",
"targetChallengeId":"c_301",
"contextType":"COMMENT",
"contextId":"cm_301",
"reason":"SPAM_AD"}