- AppServiceProvider에 Relation::enforceMorphMap 설정 추가
- tokenable_type을 'user' 별칭으로 통일
- mng에서 생성한 토큰을 api에서 사용 시 500 에러 해결
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## 인증 모달 통합
- api-explorer, flow-tester, api-logs 3개 페이지의 인증 UI 통합
- 공유 컴포넌트 생성: auth-modal.blade.php, auth-scripts.blade.php
- sessionStorage 기반으로 페이지 간 인증 상태 공유
- DevToolsAuth 글로벌 JavaScript API 제공
## 테넌트 사용자 조회 개선
- 시스템 헤더에서 선택한 테넌트의 사용자 목록 표시
- 관리자가 모든 테넌트의 사용자 조회 가능 (소속 무관)
- session('selected_tenant_id')로 Tenant 모델 직접 조회
- 테넌트 미선택 시 안내 메시지 표시
## 버그 수정
- /users 페이지 HTMX swap 오류 수정 (JSON→HTML 직접 반환)
- 사용자 이름 JavaScript 이스케이프 처리 (@js() 사용)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 즐겨찾기 클릭 시 404 오류 수정 (selectEndpointByPath 함수 추가)
- 태그명 형식을 "한글명 (English)"로 변경
- 사용자 목록 조회 오류 수정 (user_tenants 피벗 테이블 사용)
- 즐겨찾기 토글 시 페이지 새로고침 없이 로컬 상태 업데이트
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
JSON 응답에서 객체(연관 배열) 타입을 검증하는 @isObject 연산자 구현
- array_is_list()로 순차 배열과 연관 배열 구분
- $.user 등 객체 필드 검증 시 사용
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- koreanName: 한글 이름 생성 (ko_KR locale 활용)
- employeeCode: 사원코드 생성 (EMP-XXXXXX 형식)
- departmentName: 부서명 랜덤 생성
- positionName: 직급명 랜덤 생성
- dateRange: 날짜 범위 내 랜덤 날짜 생성
HR Employees CRUD 테스트에서 지원하지 않는 Faker 타입으로 인한
422 오류 및 연쇄적인 405 오류 해결
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- FlowTesterController: 테스트 실행 로직 개선
- 에러 핸들링 강화
- 응답 형식 표준화
- FlowExecutor: API 호출 실행기 개선
- 다단계 플로우 지원 강화
- 변수 바인딩 및 검증 개선
- index.blade.php: UI 개선
- 테스트 결과 표시 개선
- 사용성 향상
- routes/web.php: 라우트 정리
- composer.lock: 의존성 업데이트
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 메뉴 등록/수정: 부모 메뉴 선택에서 아이콘 제거 (메뉴명만 표시)
- 글로벌 메뉴: 아이콘 그리드 선택기, 확장 옵션(section, meta) 추가
- 페이지네이션: per_page 쿠키 값이 서버 기본값으로 덮어쓰이는 버그 수정
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- api_resend_token → api_explorer_token
- api_resend_user_id → api_explorer_user_id
- API Logs, API Explorer, Flow Tester 간 토큰 공유 가능
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- VariableBinder: {{$session.xxx}} 변수 지원 추가
- {{$session.token}}: 세션 Bearer 토큰
- {{$session.user_id}}: 세션 사용자 ID
- {{$session.user.email/name}}: 사용자 정보
- {{$session.tenant_id}}: 테넌트 ID
- getSessionAuth() 메서드 추가
- FlowExecutor: useSessionAuth 옵션 처리
- login 스텝에서 API 호출 대신 세션 토큰 사용
- {{login.token}} 등 자동 바인딩
- 세션 토큰 없을 시 명확한 에러 메시지
페이지 인증 완료 시 플로우의 login 스텝에서
실제 API 호출 없이 세션 인증 정보를 활용할 수 있음
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- LoginToken 모델 생성 (토큰 생성 및 URL 생성)
- UserController에 loginToken API 메서드 추가
- DEV_APP_URL 환경설정 추가 (config/services.php)
- 사용자 목록에 "DEV 접속" 버튼 추가
- openDevSite JavaScript 함수 추가
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- filter-collapsible 컴포넌트 생성 (모바일 필터 토글)
- 10개 index 페이지 헤더/필터 반응형 적용
- 헤더: flex-col sm:flex-row 스택 배치
- 필터: w-full sm:w-40 반응형 너비
- 버튼: flex-1 sm:flex-none 그룹 배치
- FCM 토큰 관리 페이지 (목록, 활성화/비활성화, 삭제)
- 테스트 발송 페이지 (대상 필터, 미리보기, 발송)
- 발송 이력 페이지 (필터링, 결과 확인)
- FcmSender 서비스 (HTTP v1, 배치 처리)
- fcm_send_logs 테이블 마이그레이션
- google/auth 패키지 추가
- API Explorer와 세션 토큰 공유 (api_explorer_token, api_explorer_user_id)
- 사용자 선택 드롭다운 UI 추가 (동일 테넌트 사용자 목록)
- HMAC 변수 자동 생성 기능 추가 (\$hmac.exp, \$hmac.signature 등)
- VariableBinder에서 선택된 사용자 정보 사용
- 사용자 선택 시 Sanctum 토큰 자동 발급
- 히스토리 로드 기능 구현 (loadFromHistory, fillFormFromHistory)
- 클라이언트 사이드 필수값 밸리데이션 추가
- 응답 본문 \xXX UTF-8 바이트 시퀀스 디코딩 (PHP 스택트레이스 한글 깨짐 해결)
- sidebar에 data-operation-id 속성 추가
- history-drawer 함수 연결 수정
- Flow Tester 변수 바인딩 개선
- 마이그레이션 파일 통합 정리
- ApiTokenService: API 서버 토큰 교환 서비스 추가
- AuthService: 로그인 성공 시 API 토큰 교환 연동
- 레이아웃: 세션 토큰을 localStorage에 동기화 (FCM 사용)
- config/services.php: exchange_secret 설정 추가
환경변수 필요: INTERNAL_EXCHANGE_SECRET (API와 동일)
- HTMX 응답 에러 수정: JSON 래핑 대신 HTML 직접 반환
- MenuController, GlobalMenuController의 index 메소드 수정
- index.blade.php, global-index.blade.php의 JSON 파싱 로직 제거
- 메뉴 options 필드 검증 추가
- StoreMenuRequest, UpdateMenuRequest에 options 필드 추가
- section 변경이 정상 저장되도록 수정
- 개발도구 메뉴 하드코딩 제거, DB 기반 동적 렌더링
- sidebar.blade.php에서 하드코딩된 메뉴 제거
- tools-menu.blade.php 컴포넌트 신규 생성
- section=tools 메뉴가 하단 고정 영역에 동적 표시
- OpenAPI 스펙 파일을 mng/storage/api-docs/로 복사
- config 경로를 storage_path()로 변경 (Docker 호환)
- 라우트 이름 수정 (dev-tools.api-explorer.* 접두사)
- HTMX 트리거 수정 (input changed, autocomplete off)
- openSettingsModal, showToast 함수 추가
- Config, Service, Controller, View 생성
- Model 4개 (admin_api_* 테이블 참조)
- 3-Panel 레이아웃 (sidebar, request, response)
- HTMX 기반 동적 UI
- 마이그레이션은 api/ 프로젝트에서 관리
- 리스트/상세 페이지에 재전송 버튼 추가
- 인증 방식 선택: 토큰 직접 입력 / 사용자 선택(Sanctum 토큰 발급)
- 환경별 API URL 변환 (API_BASE_URL 설정)
- X-API-KEY 헤더 자동 추가 (FLOW_TESTER_API_KEY 사용)
- 성공/실패 상태 배너 표시
- 세션에 토큰 저장하여 다음 재전송 시 자동 입력
- 재전송 성공 시 1초 후 페이지 새로고침
- 에러만 필터 옵션 추가 (4xx+5xx)
- pagination.blade.php: data-server-value 속성 추가, 즉시 실행 스크립트로 서버값 강제 설정
- pagination.js: htmx:afterSwap에서 쿠키값 대신 서버값(data-server-value) 우선 사용
- item-fields: 페이지네이션 추가, handlePageChange/handlePerPageChange 핸들러 구현
- 디버그 코드 제거
- MeetingLogService: processUploadedFile 메서드 추가
- MeetingLogController: uploadFile 엔드포인트 추가
- routes/api.php: /api/meeting-logs/upload 라우트 추가
- meeting-summary.blade.php: 드래그앤드롭 파일 업로드 UI 구현
- refreshMeetingList 함수로 목록 새로고침 처리
- 소프트 삭제된 필드 목록에 표시 (withTrashed)
- 삭제된 필드 시각적 구분 (빨간 배경, '삭제됨' 배지)
- 필드 복원 기능 추가 (restore API)
- 필드 영구 삭제 기능 추가 (forceDelete API)
- 체크박스 선택 및 일괄 삭제 기능 추가
- 시스템 필드 삭제 제한 해제
- 커스텀 모달 적용 (showConfirm, showDeleteConfirm)