path

POST /api/v1/reports

설명

신고 접수. 무엇을 신고하든 유저/챌린지 둘 중 하나로 들어온다. 사유 선택(셀렉트)만 받고 자유 텍스트는 받지 않는다.

<aside> 🔄

2026-08-26 개편 반영 — ① detail(자유 텍스트) 폐기 ② LLM 허위 신고 필터 폐기 — 접수 게이트 없음 ③ 누적 카운트 전면 폐지(행위 5명 강퇴 · 유저 10명 확인 · 챌린지 10명 가입 차단) ④ 방장 알림 폐기 ⑤ 재신고는 구조적으로 불가하므로 duplicate 플래그 폐기 ⑥ 용어 블랙리스트 → 차단.

근거: 신고 정책 §2 · §5, 제재 정책 §3.4

</aside>

동작 순서 — 단일 동기 트랜잭션이다.

  1. 차단 등재 — 신고자 화면 효과를 즉시 적용하고 응답에 담아준다. 유저: 그 유저의 공지·댓글 전부 미노출 + 임시 닉네임 + 기본 이미지. 챌린지: 미참여면 탐색·목록에서 미노출 / 참여 중이면 방은 유지하되 이미지→기본·제목→AI 임시 제목·설명→빈칸(방 자체가 보기 싫으면 직접 나가야 한다).
  2. 컨텍스트 스냅샷 저장 — 유저 텍스트를 받지 않는 대신 서버가 신고 시점 컨텍스트를 자동 수집한다: 대상 유형·식별자, 대상 콘텐츠 본문·이미지·수정 상태, 소속 챌린지(방 이름·참여 상태), 피신고자 프로필(닉네임·프로필 이미지), 신고 발생 화면, 접수 시각. 이후 원본이 수정·삭제돼도 판단에는 스냅샷을 쓴다.
  3. 전건 적재 — 임계값 없이 신고 건을 적재한다. 적재 자체는 어떤 제재도 발동시키지 않는다. 제재는 운영자가 적재된 건을 검토해 계정 단위로만 내린다.

비동기 단계는 없다. LLM 호출도, 카운트 재계산도, 자동 강퇴 트리거도 없다.

기타 규칙:

Request Body

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 — 사유별 처리 차이 없음. 운영자 검토 시 분류 힌트로만 쓴다

json

{"targetType":"USER",
	"targetUserId":"u_55",
	"targetChallengeId":"c_301",
	"contextType":"COMMENT",
	"contextId":"cm_301",
	"reason":"SPAM_AD"}

Response Body