Commit graph

46 commits

Author SHA1 Message Date
47afd68921 fix: 봇 테이블 컬럼 너비 고정
- table-fixed 적용으로 컬럼 너비 통일
- 각 컬럼에 퍼센트 너비 지정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:09:02 +09:00
b5118f2dea feat: 봇 관리 섹션별 다른 디자인 적용
- Meilisearch: 리스트형 (BotListItem) - 한 줄에 모든 정보
- YouTube: 미니 카드형 (BotMiniCard) - 호버시 액션 버튼
- X: 테이블형 (BotTableRow) - 표 형식으로 정보 비교

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:04:16 +09:00
dbfee503d5 fix: BotCard 구분 개선
- 테두리 및 그림자 강화
- 통계 영역 배경색 추가로 구분감 향상

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:01:49 +09:00
b3357e0663 refactor: BotCard 디자인 개선
- 타입별 아이콘 제거 (섹션 헤더에서 표시)
- 통계 정보 가로 배열로 컴팩트하게 변경
- 버튼을 하단에 플랫하게 배치
- 전체적으로 미니멀하고 깔끔한 스타일로 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:01:15 +09:00
9735206da7 feat: 콘서트 폼 프론트엔드-백엔드 연결
- createConcertSchedule API 함수 추가
- handleSubmit에서 FormData 구성 및 API 호출 구현
- 유효성 검사 및 저장 성공 시 목록으로 이동

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:13:53 +09:00
ad8406fdd7 feat: 세트리스트 섹션 및 곡 검색 다이얼로그 추가
- 세트리스트 섹션: 곡명, 앨범명, 참여 멤버 선택
- 곡 검색 다이얼로그: 앨범별 트랙 검색 및 다중 선택
- 직접 입력과 곡 검색 두 가지 방식으로 곡 추가 가능
- 공연 일정/세트리스트 추가 버튼을 하단으로 이동
- ConfirmDialog에 createPortal 적용
- 콘서트 정보 → 공연 정보로 명칭 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 23:05:15 +09:00
7f3fe7e251 feat: 콘서트 일정 추가 폼 UI 구현
- 콘서트 정보 섹션: 공연명, 포스터, 참여 멤버 선택
- 공연 일정 섹션: 다회차 지원 (날짜, 시간, 장소)
- VenueSearchDialog 컴포넌트 추가 (국내/해외 장소 검색)
- 회차 추가/삭제 애니메이션 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 23:57:33 +09:00
83c955f8a9 refactor: Meilisearch 봇을 단순 일일 동기화 방식으로 변경
- Watchtower 제외 라벨 추가하여 자동 업데이트 방지
- 버전 체크 방식 제거, 매일 12시 전체 동기화로 변경
- 봇 관리 UI를 다른 봇들과 동일하게 통일 (버전 → 업데이트 간격)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 11:59:18 +09:00
5b9d93b37f feat: 데뷔/주년 기념일 카드 및 축하 다이얼로그 추가
- DebutCard 컴포넌트 추가 (PC/모바일)
- DebutCelebrationDialog 축하 다이얼로그 추가
- Fromis9Logo SVG 컴포넌트 추가
- 기념일 카테고리 추가 (ID: 9)
- 데뷔일(2018.01.24) 및 주년 일정 자동 생성
- 폭죽 효과 추가 (fireDebutConfetti)
- 카테고리 정보 DB에서 동적 조회하도록 개선

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:04:29 +09:00
a7bc2e9800 곡 상세 페이지 트랙 변경 시 스크롤/애니메이션 개선
- ScrollToTop: PC 레이아웃의 main 요소 스크롤 초기화 추가
- TrackDetail: key prop으로 트랙 변경 시 컴포넌트 리마운트
- TrackDetail: main 요소 스크롤 초기화 (PC는 main에서 스크롤)
- 수록곡 선택 시 Link 대신 button + navigate 사용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:03:33 +09:00
5415893f9d 트랙 영상 타입 구분 기능 추가
- DB: music_video_url을 video_url로 변경, video_type 컬럼 추가
- 백엔드: insertTracks에서 video_url, video_type 처리
- 관리자: 영상 타입 선택 드롭다운 추가 (뮤직비디오/스페셜 영상)
- CustomSelect: {value, label} 객체 옵션 및 size prop 지원
- 트랙 상세: video_type에 따른 라벨 동적 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:56:12 +09:00
87a69c0cbd refactor: API 응답에서 datetime을 date와 time으로 분리
- datetime 필드를 date와 time 필드로 분리하여 00:00 시간도 정상 표시되도록 수정
- 백엔드: formatSchedule, Meilisearch 검색 결과, 스키마 업데이트
- 프론트엔드: datetime 파싱 로직 제거, date/time 직접 사용
- 문서: API 응답 예시 업데이트

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:11:02 +09:00
85f03cb2d8 타임스탬프 KST 통일 및 Meilisearch 동기화 소요 시간 추가
- date.js: nowKST() 함수 추가
- 모든 타임스탬프를 UTC에서 KST(+09:00)로 변경
  - scheduler.js, bots.js, x/index.js, logger.js, app.js
- Meilisearch 봇에 동기화 소요 시간(ms) 추적 추가
- BotCard.jsx: 중복된 마지막 동기화 대신 소요 시간 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 22:00:58 +09:00
95285634e9 cron 스케줄러 한국 시간대 적용 및 봇 카드 UI 개선
- scheduler.js: cron.schedule에 timezone: 'Asia/Seoul' 옵션 추가
- bots.js: Meilisearch 봇 API에 버전 정보 추가
- BotCard.jsx: Meilisearch 봇 카드에 마지막 동기화 시간, 동기화 수, 버전 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 21:52:01 +09:00
e852f215a3 feat: 보안 강화 및 인증 개선 (Phase 2)
- 로그인 Rate Limit 추가 (5회/분, 마지막 시도 기준 리셋)
- Multipart JSON 파싱 에러 처리 추가
- 로그아웃 시 무한 리다이렉트 버그 수정
- 인증 라우트 가드(RequireAuth) 추가로 비로그인 접근 차단
- Zustand hydration 대기로 페이지 깜빡임 해결
- admin/public 라우트 조건부 렌더링으로 경로 매칭 경고 해결

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 20:47:05 +09:00
607457790d fix: 어드민 하위 페이지 스크롤 문제 수정
일정 목록 페이지(/admin/schedule)만 내부 스크롤 처리하도록 변경하여
봇 관리, 사전 관리, 일정 추가 등 하위 페이지에서 스크롤이 정상 작동하도록 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:04:01 +09:00
980ae3fe1d refactor: frontend-temp를 frontend로 대체 및 문서 업데이트
- frontend 폴더를 새로 리팩토링된 frontend-temp로 교체
- docs/architecture.md: 현재 프로젝트 구조 반영
- docs/development.md: API 클라이언트 구조 업데이트
- docs/frontend-improvement.md 삭제 (완료된 개선 계획)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 10:29:30 +09:00
1a9fa54981 fix: 생일 표시 버그 수정 및 데이트픽커 개선
- 생일이 생년 이전 년도에 표시되는 버그 수정
- 페이지 진입 애니메이션 추가 (사전 관리, 일정 추가)
- 데이트픽커 12년 단위 이동으로 변경
- 년도 선택 시 월 선택 화면 전환 제거
- 시작 년도 2025년 고정, 이전 이동 비활성화
- PC/모바일 일정 페이지, 관리자 페이지 모두 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 16:41:34 +09:00
94fc7b4c7f feat(frontend): PC/모바일 404 페이지 추가
- PC/모바일 각각 사이트 스타일에 맞는 404 페이지 생성
- framer-motion 애니메이션 적용
- PC Layout 수정으로 푸터 하단 고정
- 모바일은 100dvh로 스크롤 없이 전체 화면 사용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 09:57:28 +09:00
7a1e04b6ae 모바일 웹: 멤버 페이지 UI 개선 (앱 디자인 적용)
- 그리드 레이아웃에서 카드 스와이프 스타일로 변경
- 상단 썸네일 인디케이터 추가 (자동 스크롤, 클릭 이동)
- 멤버 페이지 헤더 그림자 제거 (noShadow prop)
- Swiper 라이브러리로 좌우 스와이프 구현
- 카드 그림자 및 레이아웃 최적화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 14:38:59 +09:00
e3667037c7 스크롤 초기화: 페이지 전환 시 모바일 레이아웃 스크롤 컨테이너도 처리 2026-01-12 16:01:50 +09:00
0664c7b594 모바일: 홈 앨범 섹션 배경색 통일, 바텀바 페이지 전환 시 스크롤 맨 위로 2026-01-12 15:53:01 +09:00
64e12e47ae 앨범 상세: 바텀시트 웹 동일 애니메이션, 동영상 썸네일 지원 2026-01-12 14:51:15 +09:00
d6bc8d79ba 모바일 앨범 갤러리 UI 대폭 개선
- Swiper 라이브러리로 ViewPager 스타일 라이트박스 구현
- LightboxIndicator 컴포넌트에 width prop 추가 (모바일 120px)
- 2열 지그재그 Masonry 그리드 레이아웃
- 바텀시트 정보 표시 (드래그 핸들 지원)
- 뒤로가기 처리 (라이트박스/다이얼로그 닫기)
- 앨범 조회 API: folder_name 또는 title로 검색 (PC/모바일 호환)
2026-01-11 23:15:56 +09:00
1d86c6b841 Admin 페이지에 AdminLayout 적용하여 헤더 고정 + 본문 스크롤 구조 구현
- AdminLayout.jsx 컴포넌트 생성 (헤더 고정 + overflow-y-auto)
- AdminDashboard, AdminMembers, AdminMemberEdit에 적용
- AdminAlbums, AdminAlbumForm, AdminAlbumPhotos에 적용
- AdminScheduleCategory, AdminScheduleBots, AdminScheduleForm에 적용
- AdminSchedule은 내부 스크롤 처리로 자동 감지하여 제외
2026-01-11 12:12:46 +09:00
233b76355e refactor: 일정 페이지 레이아웃을 일정 관리 페이지와 동일하게 수정
- 화면 고정 레이아웃으로 변경 (h-[calc(100vh-64px)] overflow-hidden)
- grid grid-cols-3 레이아웃으로 변경
- 왼쪽 달력/카테고리 영역 고정, 오른쪽 일정 목록만 스크롤
- Layout.jsx에서 일정 페이지 Footer 숨김 처리
2026-01-11 11:26:17 +09:00
cdca23e317 refactor: PC public 페이지 공통 컴포넌트 및 유틸 적용
- LightboxIndicator 공통 컴포넌트 생성 및 AlbumDetail, AlbumGallery에 적용
- formatDate를 utils/date에서 import하도록 변경 (Album, Members, AlbumDetail)
- 중복 코드 약 100줄 제거
2026-01-10 09:06:26 +09:00
d52b43397c refactor: ConfirmDialog 공통 컴포넌트 생성 및 적용
새로 생성된 파일:
- components/admin/ConfirmDialog.jsx (109줄)
  - 삭제 확인 등 위험한 작업을 위한 공통 다이얼로그
  - Props: isOpen, onClose, onConfirm, title, message, loading, variant 등

수정된 파일:
- pages/pc/admin/AdminAlbums.jsx (60줄 → 15줄)
- pages/pc/admin/AdminSchedule.jsx (70줄 → 17줄)

총 약 100줄의 중복 코드 제거
2026-01-09 23:36:34 +09:00
7f9c53b53a refactor: AdminHeader 공통 컴포넌트 생성 및 AdminMembers 적용
새로 생성된 파일:
- components/admin/AdminHeader.jsx (47줄)
  - 로고, Admin 배지, 사용자 정보, 로그아웃 버튼 포함

수정된 파일:
- pages/pc/admin/AdminMembers.jsx
  - AdminHeader import 추가
  - 중복 헤더 JSX 제거 (24줄 -> 1줄)
  - handleLogout 함수 제거 (5줄)

나머지 9개 Admin 페이지도 동일한 패턴으로 적용 가능
2026-01-09 23:09:11 +09:00
07a0c30f0f refactor: NumberPicker, CustomTimePicker 공통 컴포넌트로 분리
새로 생성된 파일:
- components/admin/NumberPicker.jsx (185줄)
- components/admin/CustomTimePicker.jsx (176줄)

수정된 파일:
- pages/pc/admin/AdminScheduleForm.jsx (362줄 제거)

AdminScheduleForm에서 중복 정의된 NumberPicker, CustomTimePicker를
별도 파일로 분리하고 import로 대체.

총 코드 변화: 361줄 → 0줄 (361줄 제거)
2026-01-09 23:05:38 +09:00
7867eb8928 refactor: CustomDatePicker 공통 컴포넌트로 분리
- components/admin/CustomDatePicker.jsx 생성 (269줄)
- AdminMemberEdit에서 중복 제거 (-237줄)
- AdminAlbumForm에서 중복 제거 (-273줄)
- AdminScheduleForm에서 중복 제거 (-349줄)
- 현재 년도/월 표시: 테두리 제거, 글씨색만 유지
- 오늘 날짜: 배경색 제거, 글씨색만 유지
- 요일/일요일/토요일 색상 구분 추가

총 코드 감소: 약 860줄
2026-01-09 22:42:33 +09:00
4cbfeb5168 refactor: CSS를 공통/PC/모바일로 분리
- index.css: 공통 스타일 (tailwind, 스크롤바, 트랜지션)
- pc.css: PC 전용 (min-width, 스크롤바 공간)
- mobile.css: 모바일 전용 (레이아웃, 달력 스타일)
- 각 Layout 컴포넌트에서 해당 CSS import
2026-01-09 18:05:07 +09:00
cca25b456c feat(mobile): 모바일 레이아웃 시스템 구축 - 컨텐츠 영역만 스크롤되도록 개선
- index.css: 모바일 레이아웃 CSS 시스템 추가 (mobile-layout-container, mobile-content, mobile-toolbar)
- Layout.jsx: MobileLayout에서 레이아웃 및 body 스크롤 제어 통합
- 하단 네비게이션을 fixed에서 flex-shrink-0으로 변경
- 모바일 스크롤바 숨김 처리
- Home, Members, Album, Schedule 페이지 여백 정리
2026-01-09 09:26:51 +09:00
f958e2b5e2 feat(mobile): 모바일 페이지 기본 구현
- 모바일 레이아웃 및 하단 네비게이션 추가
- 홈 페이지: 히어로, 멤버, 앨범(2개), 일정 섹션
- 멤버 페이지: 현재/전 멤버 분리, 상세 모달
- 앨범 페이지: 목록, 상세, 갤러리
- 일정 페이지: 캘린더 피커, 세로 스크롤 목록
- ScrollToTop 컴포넌트로 페이지 이동 시 스크롤 초기화
- PC 홈 일정 API startDate+limit 방식으로 변경
2026-01-07 10:10:12 +09:00
dff43126c4 feat(schedule): 일정 수정/삭제 기능 구현 및 DB 스키마 개선
- schedule_members 테이블 분리 (members 컬럼 → 별도 테이블)
- schedules 테이블 컬럼 comment 추가 및 순서 정리
- 상세주소(location_detail) 필드 추가
- 장소 검색 UI 개선 (탭 제거 → 입력 필드+검색 버튼 병합)
- 카카오 장소 검색 API 프록시 추가 (/api/admin/kakao/places)
- 백엔드 CRUD API 구현 (GET/PUT/DELETE /schedules/:id)
- 프론트엔드 삭제 기능 및 확인 다이얼로그 추가
- 프론트엔드 수정 모드 지원 (기존 데이터 로드)
2026-01-05 18:11:40 +09:00
4da5ea58ef feat: 일정 카테고리 관리 기능 추가 및 다이얼로그 스타일 통일
- 일정 카테고리 CRUD API 추가 (backend/routes/admin.js)
- AdminScheduleCategory 페이지 신규 추가
  - 카테고리 추가/수정/삭제 기능
  - 드래그 앤 드롭 정렬 (framer-motion Reorder)
  - react-colorful 기반 커스텀 색상 선택기
  - 중복 카테고리 체크
- AdminScheduleForm에 동적 카테고리 로드 기능 추가
- 삭제 다이얼로그 앨범 스타일로 통일 (AlertTriangle 아이콘, 경고 메시지)
- Toast 컴포넌트 exit 애니메이션 수정
- 토스트 3초 자동 닫힘 기능 추가
2026-01-05 11:20:44 +09:00
2a952f39ab feat: 일정 관리 페이지 및 타임피커 개선
- AdminSchedule, AdminScheduleForm 페이지 추가
- 커스텀 타임피커 구현 (오전/오후 지원, 드래그/휠 스크롤)
- Lightbox 공통 컴포넌트 분리 (components/common/Lightbox.jsx)
- 이미지 드래그 앤 드롭 정렬 기능
- 이미지 삭제 확인 다이얼로그
- 이미지 추가 버튼 첫번째 위치 고정
- 일정 이미지 순서 번호 표시
- react-ios-time-picker 라이브러리 CSS 제거
2026-01-04 20:50:21 +09:00
a5eba6535f fix: 사이트 레이아웃 개선
- 사이트 전체 min-width 1200px → 1440px로 변경
- 헤더/갤러리 양쪽 여백 통일 (px-24)
- 갤러리 CSS 정리 (호버 효과만 유지)
2026-01-04 02:22:42 +09:00
035cdf0383 refactor: '스케줄' 용어를 '일정'으로 통일
- 헤더 메뉴, 페이지 제목, 안내 메시지 등 전체 변경
- Home, Schedule, Header, AdminDashboard 파일 수정
2026-01-03 14:30:30 +09:00
a55d06655f feat: 커스텀 툴팁 컴포넌트 추가 및 메뉴 애니메이션 개선
- 마우스 따라다니는 커스텀 Tooltip 컴포넌트 구현
- AdminAlbums 관리 버튼에 툴팁 적용
- 앨범 상세 점3개 메뉴 열기/닫기 애니메이션 추가
- 컨셉 포토에 lazy loading 추가
2026-01-03 10:16:38 +09:00
40fa94f9f5 feat: 앨범 관리 기능 - CRUD API, RustFS 커버 업로드, 트랙 상세 정보, Toast 알림 2026-01-01 20:36:49 +09:00
3339b281c7 feat: 갤러리 최적화 및 라우터 개선
- 컨셉 포토 갤러리 페이지 추가 (AlbumGallery.jsx)
- react-photo-album 라이브러리로 Justified 레이아웃 구현
- 썸네일/원본 이미지 분리 (thumb_400, original 폴더)
- 라우터 변경: /discography → /album
- URL 형식 변경: ID 기반 → 앨범명 기반 (/album/하얀 그리움)
- 앨범명 기반 API 추가 (/api/albums/by-name/:name)
- 브레드크럼 스타일 네비게이션 적용
- 라이트박스 슬라이드 애니메이션 추가
- 점 형태 인디케이터로 변경
2026-01-01 17:20:36 +09:00
831715da3e feat: 앨범 상세 페이지 추가 및 UI 개선
- 앨범 상세 페이지 (AlbumDetail.jsx) 신규 생성
- 앨범 목록에서 클릭 시 상세 페이지로 이동
- 소개글/트랙 리스트 2열 그리드 레이아웃
- 트랙 호버 효과 및 총 재생시간 표시
- 페이지 전환 fade 애니메이션 적용
- '디스코그래피' -> '앨범' 텍스트 변경
- albums 테이블 description 컬럼 추가
- 트랙 duration 데이터 입력
2026-01-01 10:20:54 +09:00
80a8327c24 🔧 푸터 간소화, 스크롤바 밀림 수정 2025-12-31 22:05:28 +09:00
12c58c622e 🔧 UI 개선: 푸터 정리, X 아이콘, 스케줄 디자인 개선, min-width 설정 2025-12-31 22:02:32 +09:00
e2c1a6a774 PC 버전 프론트엔드 UI 구현 - 홈, 멤버, 디스코그래피, 스케줄 페이지 및 더미 데이터 2025-12-31 21:51:23 +09:00