Merged
Conversation
- Add roles: ['ROOT_ADMIN'] to whisky, banner, inquiry, policy menus - Wrap all data routes with RoleProtectedRoute - Dashboard remains accessible to all authenticated users Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Integrated SOPS and age key management into workflows and Docker builds to securely decrypt environment files. Updated workflows to handle age key preparation and cleanup. Adjusted Dockerfile to include SOPS installation and decryption process using BuildKit secrets.
Removed temporary file-based age key handling. Directly injected age key via environment variables into workflows and Dockerfile for BuildKit secrets.
Replaced version-based image tags with short commit SHA for better traceability. Updated additional tag to `dashboard_dev_latest`.
- WhiskyDetail: form with React Hook Form + Zod validation - TastingTagList: badge-based tag management with inline editing - Add mock data for whisky (regions, categories, sample data) - Update env scripts for SOPS with new path (application.vite) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace inline editing with edit modal dialog - Add delete confirmation modal before removing tag - Add Pencil icon to indicate editable tags Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… new whisky registration - Add ImageUpload component with drag-and-drop support for presigned URL upload - Add TagSelector component with chip-based UI for selecting/adding tasting tags - Add whisky registration page (/whisky/new) using same component in new mode - Add mock data for whisky ID 7094 (100 파이퍼스) and Scotland region - Move tasting tag section to full-width card at bottom of form - Add @radix-ui/react-popover dependency Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Extract ImageUpload, TagSelector, and DetailPageHeader into common components for reuse - Simplify WhiskyDetail layout from grid to flex-based stacking - Add "위스키 추가" menu item under whisky management navigation - Improve code organization and maintainability Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Initialize isLoading to false and set to true when async operation starts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use shadcn/ui AlertDialog for better UX consistency and styling control Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document the new sops dependency requirement and environment setup process Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
refactor: extract reusable components and add whisky creation menu
- Add image preview column with 40x40px thumbnail - Show placeholder icon (ImageOff) when image is not available - Reorder columns: ID, 이미지, 한글명, 영문명, 카테고리, 수정일 - Adjust column widths for better layout Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add whisky create API integration (POST /admin/api/v1/alcohols) - Add category reference API for dynamic category selection - Add region and distillery list APIs for dropdown options - Refactor WhiskyDetail page into modular components - WhiskyBasicInfoCard, WhiskyImageCard, WhiskyStatsCard, WhiskyTastingTagCard - Extract form logic to useWhiskyDetailForm custom hook - Add form validation with Zod schema (all fields required) - Navigate to detail page after successful registration - Add common FormField and DeleteConfirmDialog components Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add delete endpoint and types to AlcoholApi - Add update endpoint and types (PUT method) - Implement useAdminAlcoholDelete hook with cache invalidation - Implement useAdminAlcoholUpdate hook with cache invalidation - Integrate delete/update mutations in useWhiskyDetailForm - Remove console logging from api-client Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use useSearchParams for URL synchronization - Persist keyword, category, page, size in URL - Maintain search state on refresh/back navigation - Clean URL by removing default values (page=0, size=20) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add WhiskyRelatedKeywordsCard component for search keywords - Integrate related keywords state in WhiskyDetail page - Update onSubmit type to include relatedKeywords - Fix Korean IME composition issue in TagSelector (Enter key) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add categoryGroup field to CategoryReference type - Auto-set categoryGroup when selecting category (remove duplicate UI) - Delete unused whisky.mock.ts (real API in use) - Delete unused legacy alcohol.service.ts Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Install shadcn command component (cmdk package) - Create SearchableSelect common component - Apply to category, region, distillery dropdowns in WhiskyBasicInfoCard - Support keyboard navigation and search filtering Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update tasting-tag.api.ts types to match actual API spec - Create tasting-tag.service.ts for API calls - Create useTastingTags.ts hooks (list, create, update, delete) - Update TastingTagList.tsx to use API hooks instead of mock data - Update TastingTagDetail.tsx to use API hooks (list cache for edit) - Add isPending prop to DeleteConfirmDialog for loading state - Add tasting-tags routes and menu config - Remove mock data dependency Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create WhiskySearchSelect component with debounced search - Add connected whiskies section in TastingTagDetail (edit mode only) - Support adding whiskies via search dropdown with images - Support removing whiskies and opening detail page in new tab - API integration marked with TODO comments Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove name field from JwtPayload interface - Remove name field from AdminUser type in auth.ts and stores/auth.ts - Update login toast message to simple "환영합니다!" - Update UserMenu to display email prefix instead of name - Update Dashboard and Home pages to remove name references The backend JWT does not include a name field, causing "undefined 님 환영합니다" toast message after login. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add useImageUpload hook for S3 presigned URL upload flow - Add s3.service.ts for presigned URL API calls - Add s3.api.ts type definitions - Integrate image upload in WhiskyDetail page - Update WhiskyImageCard to show upload progress state Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: Whisky management & Tasting tag features
- 7개 env 관련 스크립트 삭제 (env:sync, env:local, setup 등) - scripts/ensure-env.sh 추가: 스마트 env 동기화 - dev:local/dev/dev:prod에 자동 env 체크 통합 이제 `pnpm dev:local` 하나로 env 설정부터 서버 실행까지 완료 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
[refactor] 로컬 개발 스크립트 단순화 - env 자동 동기화
- 배너 목록 페이지 (검색, 필터, 페이지네이션) - 배너 상세/등록/수정 페이지 - 순서 변경 모드 (드래그 앤 드롭) - Mock 데이터 및 서비스 레이어 - React Query 훅 (CRUD + reorder) - Zod 폼 검증 스키마 - S3 이미지 업로드 연동 - UI 컴포넌트 추가 (Label, Checkbox, Switch) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 큐레이션 mock 데이터 및 서비스 추가
- useCurations 훅 추가 (목록 조회)
- banner schema에 curationId 필드 추가
- CURATION 타입 선택 시:
- 큐레이션 드롭다운 표시
- URL 자동 생성 (/alcohols/search?curationId={id})
- targetUrl 필드 읽기 전용
- 외부 URL 옵션 숨김
- 기존 CURATION 배너 로드 시 URL에서 curationId 파싱
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 배너 조회 → 배너 목록 - 배너 등록 → 배너 추가 - 순서 변경: 배너 목록을 먼저 표시 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- @radix-ui/react-checkbox - @radix-ui/react-label - @radix-ui/react-switch Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- TastingTag API 연동 (detail, connectAlcohols, disconnectAlcohols) - 태그 생성 버그 수정 (isNewMode 조건 개선) - 위스키 상세 페이지에 태그 목록 연동 - Vitest + MSW 테스트 인프라 구축 (29개 테스트) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
[feat] TastingTag API 연동 완성 및 테스트 인프라 구축
- Playwright E2E 테스트 환경 설정 - 인증 fixture로 로그인 상태 재사용 - Page Object 패턴 적용 (tasting-tag-list.page.ts) - 테이스팅 태그 CRUD 플로우 테스트 - CLAUDE.md 리팩터링 - TDD 워크플로우 및 테스트 위치 규칙 추가 - 아키텍처 맵 및 API 3계층 패턴 문서화 - 테스트 계층 (E2E → Component → Unit) 설명 - package.json 테스트 스크립트 추가 - test:e2e, test:e2e:ui, test:all 등 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- WhiskyListPage Page Object 추가 - 테이블 기반 목록, 검색, 카테고리 필터 지원 - combobox 중복 문제 해결 (카테고리 vs 페이지네이션 구분) - WhiskyDetailPage Page Object 추가 - 상세/등록 폼 필드 셀렉터 - 아이콘 전용 뒤로가기 버튼 위치 기반 셀렉터 - 위스키 E2E 테스트 7개 케이스 - 목록: 접근, 검색, 카테고리 필터, 상세 이동 - 상세: 정보 조회, 뒤로가기 - 수정 플로우: 불완전 데이터 시 스킵 처리 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
문제: - 위스키/테이스팅 태그 상세 페이지에서 사이드바를 통해 추가 페이지로 이동하면 이전 데이터가 폼에 남아있는 버그 원인: - useEffect가 API 데이터가 있을 때만 form.reset을 호출 - isNewMode 상태 변경 시 폼 초기화 로직 누락 해결: - isNewMode가 true일 때 기본값으로 폼 초기화하는 조건 추가 - useWhiskyDetailForm.ts: DEFAULT_WHISKY_FORM으로 리셋 - TastingTagDetail.tsx: 폼 + 로컬 상태(icon, keywords) 모두 초기화 테스트: - 사이드바 3단계 메뉴 네비게이션 셀렉터 수정 - Playwright toHaveValue 어설션으로 타이밍 이슈 해결 - 모든 15개 E2E 테스트 통과 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
E2E 테스트 인프라 구축 및 폼 리셋 버그 수정
- API 타입 정의 (curation.api.ts) - 서비스 레이어 (curation.service.ts) - 실제 API 연동 - React Query 훅 (useCurations.ts) - 목록/상세 페이지 (CurationList, CurationDetail) - E2E 테스트 (curations.spec.ts) - 13개 테스트 케이스 - 메뉴 및 라우트 설정 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 큐레이션 목록에 드래그 앤 드롭 순서 변경 기능 추가 - 순서 변경 시 개별 displayOrder API 병렬 호출 - E2E 테스트 추가 (순서 변경 모드 진입/종료, API 호출 검증) - 큐레이션 폼에 isActive 필드 추가 (생성/수정 시 활성화 상태 설정) - 버전 업데이트: 1.0.13 → 1.0.14 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
CI 빌드 오류 수정 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. S3UploadPath.CURATION 추가 및 적용 2. 위스키 상세 조회 시 동시성 제한 (최대 5개) 3. displayOrder 순차 업데이트 + 실패 시 롤백 메커니즘 4. E2E 테스트에서 고정 timeout 대신 event-based 대기 사용 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: 큐레이션 관리 기능 완성 및 순서 변경 UI 개선
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
chore: version bump 1.0.17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release Dashboard v1.0.17
This PR was automatically created by version-check workflow.