Skip to content

Team-Frolog/report-service

Repository files navigation

report-service

사용자 신고·검토·제재 처리 및 기능 제안을 담당하는 독서 게이미피케이션 플랫폼 Frolog의 신고 도메인 서비스입니다.

사용자 간 신고 접수, 관리자 검토·승인, 제재 기간 설정 및 자 동 계정 정지, 기능 제안 등록을 처리합니다.

주요 기능

  • 사용자 신고 접수 (신고 대상, 사유)
  • 신고 검색·조회 (관리자 전용, 필터링·페이지네이션)
  • 신고 검토·승인 (관리자, 상태 변경)
  • 제재 처리 (정지 기간 설정, SuspendUser API 연동)
  • 정지 기간 파싱 (ms 라이브러리, "7d", "24h" 등)
  • 기능 제안 등록 (type, reason)

기술 스택

  • Node.js (ESM), Express 기반 @frolog/express-api-server
  • ORM: Sequelize (@frolog/models)
  • 공통 유틸: @frolog/common-utils (로거, HashId 등)
  • API 계약: @frolog/frolog-api
  • 유틸: ms (기간 문자열 파싱)
  • Lint/Format: ESLint, Prettier

실행 방법

npm install
npm run dev   # 개발 (nodemon)
npm start     # 프로덕션
npm run lint  # 코드 규칙 검사
npm run doc   # JSDoc 생성

디렉터리 구조

src/
  index.js                      # API 서버 부트스트랩   라우팅
  services/
    postUserReport.js           # 사용자 신고 접수
    getUserReport.js            # 신고 단건 조회 (관리자)
    searchUserReport.js         # 신고 검색 (관리자, 필터 링·페이지네이션)
    confirmUserReport.js        # 신고 검토·승인 (관리자, 제재 처리)
    postNewFeatureRequest.js    # 기능 제안 등록

API 엔드포인트 맵

src/index.js에서 @frolog/frolog-api 스펙과 서비스 로직을 매핑합니다.

  • GET: SearchUserReport (admin), GetUserReport (admin)
  • POST: PostUserReport (login), ConfirmUserReport (admin), PostNewFeatureRequest (login)

스케줄러

없음. 모든 작업은 HTTP 요청 기반으로 처리됩니다.

권한/인증

  • PostUserReport, PostNewFeatureRequest: 로그인 필수
  • SearchUserReport, GetUserReport, ConfirmUserReport: 관리자 전용 (is_admin=true)
  • HashId 인코딩: 모든 사용자 ID는 해시 형식으로 처리

신고 시스템 구조

신고 접수 (PostUserReport)

  • 신고자(issuer): 현재 로그인 사용자
  • 신고 대상(target): 해시 ID로 지정
  • 신고 사유(reason): 선택적
  • 초기 상태: 'submitted'
  • 반환: 신고 해시 ID

신고 검색 (SearchUserReport)

  • 필터: 신고 대상, 신고자, 날짜 범위, 상태, 검토자
  • 정렬: oldest (오래된 순), newest (최신 순), report ID 순
  • 페이지네이션: limit (1-100, 기본값 10), page 오프셋
  • 반환: 총 개수 + 신고 목록

신고 조회 (GetUserReport)

  • 신고 ID로 단건 조회
  • 반환: 신고 대상, 신고자, 사유, 생성일, 상태, 검토자, 검 토일, 제재 정보

신고 검토·승인 (ConfirmUserReport)

  1. 관리자가 신고 검토
  2. 상태 업데이트 (승인/거부 등)
  3. 검토자(admin) 및 검토 시각 기록
  4. 제재(penalty) 지정 시:
  • 정지 기간 파싱 (예: "7d" → 7일, "24h" → 24시간)
  • 정지 종료 시각 계산 (현재 시각 + 정지 기간)
  • SuspendUser API 호출 (user-service 연동)
  • 대상 사용자 계정 정지 처리

신고 상태

  • 'submitted': 신고 접수 (초기 상태)
  • 기타 상태는 ConfirmUserReport에서 관리 (예: 승인, 거부, 기각 등)

기능 제안 시스템

기능 제안 등록 (PostNewFeatureRequest)

  • 제안자: 현재 로그인 사용자
  • type: 제안 유형
  • reason: 제안 사유/내용
  • 반환: 기능 제안 해시 ID

제재 처리 정지 기간 설정:

  • ms 라이브러리 사용 (기간 문자열 → 밀리초 변환)
  • 예시: "7d" (7일), "24h" (24시간), "30m" (30분)
  • 정지 종료 시각: new Date(Date.now() + ms(penalty))

SuspendUser API 연동

  • 엔드포인트: @frolog/frolog-api의 SuspendUser
  • 인증: SSC_TOKEN (서비스 간 통신 토큰)
  • 파라미터: 사용자 해시 ID, 정지 종료 시각 (ISO 형식)
  • user-service에서 계정 정지 처리

주요 모델

UserReport

  • report_id (PK), target_id (FK), issuer_id (FK)
  • reason, status, approver_id (FK), reviewed_at, penalty
  • created_at, updated_at

NewFeatureRequest

  • request_id (PK), user_id (FK)
  • type, reason
  • created_at, updated_at

서비스 간 연동

  • User Service: SuspendUser API (계정 정지 처리)
  • SSC_TOKEN: 서비스 간 인증 토큰

About

신고 서비스.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 3

  •  
  •  
  •