Files
HeuJung 6c8381f164 fix(core,board,ecommerce,plugins): API 문서 미채움 마커 전수 채움 + 미해석 lang 키 정정 + IDV 조회 시도횟수 비노출
이슈 본연: API 레퍼런스의 미채움 마커 5종(실측 제외/TODO/필드 없음/대표 에러 없음)
1,194건을 코드에서 읽어 전수 채우고(0건), api:docgen 재생성이 사람이 채운 내용을
손실·열화시키던 멱등성 결함 4종(CRLF, 표 파이프 이스케이프, 에러 서술 보존, 중복
라우트명 키)을 근본 수정. --check 를 실측 제외와 드리프트가 구분되도록 재정의.
ParameterDescriber/ResourceFieldDescriber 에 leaf 폴백·SEO 스코프·공통 사전 확장.

파생 결함(문서 실측 중 발견): ResponseHelper 기본 메시지 키 6종이 존재하지 않는
messages.* 를 가리켜 응답 message 가 번역문 대신 키 문자열로 노출되던 문제를 common.*
으로 정정하고, 코어 7 + gdpr/marketing/pay_kginicis/verification/ecommerce 확장의
호출부와 누락 lang 키(게시판 10키 + 이커머스 category_images 4키 포함)를 ko/en/ja
전수 정정. 중복 그룹 키 2건은 기존 키로 호출부 통합.

보안: GET /api/identity/challenges/{id} 는 권한 가드 없는 공개 폴링 엔드포인트인데
Service::getStatus 가 attempts/max_attempts 를 응답에 담아 남은 시도 횟수를 추론할 수
있었다. 두 필드를 제거하고, 챌린지 화면(admin_basic/basic)의 서버 attempts 참조를
제거(남은 횟수 UI 는 query fallback + verify 실패 시 로컬 증가로 유지).

부수 정리(변경셋에 들어온 board 컨트롤러의 audit 사전 결함): FormRequest 4개 신설로
base Request 주입 제거, CommentController 의 Board 직접 호출을 BoardService 위임으로
전환, PHPDoc @return 보강. board 스위트에서 발견한 stale test 3건(seed SSoT 불일치,
admin 계정 user 역할 누락)도 같은 세션에서 정정.

버전 정렬(공개 release 기준): 코어 7.0.3→7.0.4, sirsoft-board 1.0.1→1.0.2,
verification_kginicis 1.0.0→1.0.1, admin_basic 1.0.1→1.0.4.
2026-08-06 14:16:40 +09:00

5.2 KiB

Consent Log API 레퍼런스

소유: plugin sirsoft-gdpr · 생성: php artisan api:docgen (실측 기반). @generated 블록은 재생성 시 갱신되며, 사람이 작성한 설명은 보존됩니다.


TL;DR (5초 요약)

1. 이 문서는 실제 API 호출로 실측한 Consent Log 엔드포인트 레퍼런스입니다
2. 각 엔드포인트: 메서드/URI/권한 + 요청 파라미터 표 + 요청 예시(raw HTTP) + 실측 응답 필드 표 + 응답 예시(envelope)
3. 응답 필드의 예시값·응답 예시 JSON 은 실제 호출 응답에서 관측된 값입니다
4. 갱신: 코드 변경 후 php artisan api:docgen 재실행
5. 설명(TODO) 칸은 사람이 채웁니다

GET /api/plugins/sirsoft-gdpr/admin/consent-log

  • 라우트명: api.plugins.sirsoft-gdpr.admin.consent-log.index
  • 컨트롤러: Plugins\Sirsoft\Gdpr\Http\Controllers\Admin\GdprAdminConsentLogController@index
  • 인증/권한: auth:sanctum + permission:sirsoft-gdpr.privacy.view

요청 파라미터

요청 파라미터 없음.

요청 예시

GET /api/plugins/sirsoft-gdpr/admin/consent-log HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer {YOUR_TOKEN}

응답 필드 (data 내부)

목록 응답: data.data[] 배열 항목의 필드 + data.pagination.

필드 타입 실측 예시값 용도/설명
id integer 83 기본 키 (내부 식별자)
user_id integer 130 user 식별자 (연관 리소스 참조)
session_id string c50916f6-58ee-42a6-a046-60a0c9ecfad2 session 식별자 (연관 리소스 참조)
consent_key string cookie_marketing 변경된 동의 항목 키 (쿠키 카테고리 키). 어떤 동의 항목의 부여/철회가 기록된 행인지 나타냅니다
action string revoked 이 이력 행의 변경 유형 (granted=동의 부여, revoked=철회, rejected=명시적 거부). rejected는 배너에서 "동의하지 않고 계속하기"로 선택형 카테고리를 거부한 행위이며 관리자 화면에 amber 배지로 표시됩니다. Art.7(1) 입증 트레일의 행위 구분입니다
source string banner 동의 변경이 발생한 경로. 허용 어휘는 ConsentSource enum 5종 — banner=쿠키 배너, preference_center=환경설정 센터, register=회원가입, mypage=마이페이지, mypage_renew_all=정책 개정 후 마이페이지 일괄 재동의(서버 자체 기록)
policy_version string 10 변경 시점의 정책 버전 문자열. 해당 동의가 어느 정책 버전 기준으로 표명되었는지 기록해 정책 갱신 후 재동의 판정과 감사에 사용됩니다
categories object {"cookie_analytics":false,"cookie_marketing":false,"cooki… 변경 시점 전체 카테고리별 동의 여부 스냅샷 (키→boolean). MySQL JSON 컬럼이라 키가 알파벳 순으로 정규화 저장됩니다
categories_snapshot array [{"key":"cookie_necessary","label_key":"sirsoft-gdpr.cons… categories 객체를 관리자 화면 iteration 친화 배열({key, label_key, granted})로 변환한 것. 필수→분석→마케팅 UX 위계 순으로 재정렬되며 label_key는 프론트가 다국어로 해석합니다
ip_address string 127.0.0.1 요청/행위가 발생한 IP 주소
user_agent string Mozilla/5.0 (Windows NT 10.0; Win64; … 동의 변경 요청의 User-Agent 문자열. DPO 감사 시 동의 표명 단말/브라우저를 식별하는 용도이며 회원 삭제 시 NULL로 익명화됩니다
created_at string 2026-07-03 00:24:27 생성 일시
user object {"id":130,"uuid":"a21d03b4-df0b-4aa6-ab7a-f51143f6375a","… 동의 주체 회원 정보(id/uuid/name/email). 관계가 로드된 경우에만 포함되며 게스트 이력이거나 삭제로 익명화된 경우 null입니다

응답 예시

HTTP/1.1 200
{
    "success": true,
    "message": "성공적으로 처리되었습니다.",
    "data": {
        "data": [],
        "pagination": {
            "current_page": 1,
            "last_page": 1,
            "per_page": 25,
            "total": 0,
            "from": null,
            "to": null
        }
    }
}

에러 응답

상태코드 의미 발생 조건
401 Unauthenticated 유효한 Bearer 토큰이 없거나 만료된 경우
403 Forbidden 요구 권한(sirsoft-gdpr.privacy.view)이 없는 경우

설명 관리자 감사 화면에서 gdpr_user_consent_histories 테이블의 동의 로그를 페이지네이션으로 조회합니다. auth:sanctum과 sirsoft-gdpr.privacy.view 권한이 필요합니다. email, session_id, consent_keys[], actions[](granted|revoked|rejected — ConsentAction enum 전 케이스), sources[](banner|preference_center|register|mypage|mypage_renew_all — ConsentSource enum 전 케이스), per_page(1~100, 기본 20) 쿼리 필터를 지원합니다. DPO 감사 용도로 IP 주소와 User-Agent까지 노출되는 조회 전용 엔드포인트입니다.