Commit graph

296 commits

Author SHA1 Message Date
0c9dd44c2b feat: 봇 테이블 액션 버튼 개선
- 전체 동기화 아이콘을 RotateCcw로 변경
- YouTube 봇에만 수정(Pencil) 버튼 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:12:22 +09:00
6b39cf043f fix: 봇 테이블 중간 4개 컬럼 너비 통일 (10%)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:09:57 +09:00
47afd68921 fix: 봇 테이블 컬럼 너비 고정
- table-fixed 적용으로 컬럼 너비 통일
- 각 컬럼에 퍼센트 너비 지정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:09:02 +09:00
e729d33aee refactor: 봇 관리 UI 통일 및 개선
- 모든 섹션에 테이블형 디자인 통일
- 섹션 헤더에서 "N개의 봇" 텍스트 제거
- Meilisearch 섹션에 전용 아이콘 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 18:06:01 +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
68027f0654 fix: X 섹션 아이콘 및 텍스트 수정
- Twitter 아이콘 → X 아이콘으로 변경
- "X (Twitter)" → "X"로 간소화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 17:59:53 +09:00
1c04f4ed6d refactor: 봇 관리 페이지 타입별 섹션 분리
- Meilisearch, YouTube, X 세 섹션으로 분리
- 각 섹션에 아이콘 및 색상 적용
- YouTube 섹션에 "봇 추가" 버튼 추가 (기능은 추후 구현)
- YouTube 봇 동적 관리 계획서 추가 (docs/youtube-bots-plan.md)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 17:58:30 +09:00
78eb513c28 Revert "fix: 봇 관리 페이지 시간 24시간제로 표시"
This reverts commit 7d56531bee.
2026-02-05 18:05:47 +09:00
7d56531bee fix: 봇 관리 페이지 시간 24시간제로 표시
- hour12: false 옵션 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 18:05:01 +09:00
47cd93173c fix: 예정 배지 세로 중앙 정렬
- items-start → items-center로 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:25:36 +09:00
277c6a79c9 refactor: 예정 일정 placeholder UI 개선
- 유튜브 아이콘 제거
- 업로드 예정 텍스트 하단으로 이동
- 배경 오버레이를 하단 그라데이션으로 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:24:55 +09:00
cb184e4fa5 feat: 유튜브 예정 일정에 채널 배너 이미지 표시
- YouTube API에서 채널 정보(배너 이미지) 조회 함수 추가
- 채널 정보 Redis 캐싱 (24시간)
- 일정 상세 API에 bannerUrl 필드 추가
- 예정 일정 placeholder에 배너 이미지 배경 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:20:49 +09:00
eb7d2005b7 refactor: 예정 일정 placeholder 텍스트 변경
- "영상 준비 중" → "업로드 예정"으로 변경
- 불필요한 부연 설명 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:14:35 +09:00
b16aa963cd feat: 유튜브 예정 일정 UI 추가
- PC YoutubeSection에 예정 일정 placeholder UI 추가
- 예정 일정일 경우 "예정" 배지 표시
- 영상 준비 중 placeholder 컴포넌트 추가
- 예정 일정에도 channelName 반환하도록 API 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:57:58 +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
169c584d31 feat: 콘서트 폼에 굿즈 섹션 추가
- 굿즈 이미지 다중 업로드 및 드래그 순서 변경
- 삭제 시 확인 다이얼로그 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 22:20:01 +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
f86e7d1b33 fix: 멤버 페이지 생일 아이콘을 Calendar에서 Cake로 변경
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 13:39:54 +09:00
f97c925fba refactor: 생일 페이지 라우트를 /schedule/:id 형식으로 변경
- /birthday/:memberName/:year → /schedule/birthday-{year}-{nameEn}
- ScheduleDetail에서 특수 ID(birthday, debut, anniversary) 감지
- Birthday 컴포넌트가 props로 year, nameEn 받도록 변경
- 멤버 API가 영문명으로도 조회 가능하도록 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 13:15:04 +09:00
ea9922de00 refactor: 일정 정렬 로직을 백엔드로 이동
- 백엔드에서 특수 일정(기념일, 생일) 우선 정렬
- 프론트엔드의 중복 정렬 로직 제거
- 정렬 순서: 날짜 > 특수 일정 > 시간

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 18:30:51 +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
eae56df146 곡 상세 페이지에서 다른 곡 선택 시 히스토리 교체
- 수록곡 목록에서 다른 곡 클릭 시 replace 옵션 사용
- 뒤로가기 시 앨범 상세 페이지로 바로 이동

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:56:47 +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
0c6d250a9d feat: 모바일 곡 상세 페이지 애니메이션 개선
- 앨범 상세 페이지와 동일한 순차 애니메이션 적용
- 툴바 제목 "곡 상세" → "앨범"으로 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:38:37 +09:00
821ff64bad refactor: 모바일 UI 개선
- 멤버 페이지: 바텀시트를 가운데 다이얼로그로 변경, 닫기 버튼 추가
- 앨범 상세: 섹션별 순차 애니메이션, 앨범 소개 다이얼로그로 변경
- 앨범 갤러리: 헤더 뒤로가기 버튼/클릭 기능 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:36:27 +09:00
89e346d2c6 fix: X 일정 상세 UI 개선
- 닉네임과 @id 사이 간격 축소 (PC/모바일)
- 모바일 툴바에서 뒤로가기 버튼 제거, 타이틀 가운데 정렬

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:15:15 +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
5fa9c2a9d0 feat: 모바일 멤버 페이지 그리드 레이아웃으로 리디자인
- 카드 스와이프에서 2열 그리드 레이아웃으로 변경
- 현재 멤버와 전 멤버 섹션 분리
- 멤버 선택 시 드래그 가능한 바텀 시트 다이얼로그
- AnimatePresence로 열기/닫기 애니메이션 추가
- 그리드에서 image_medium, 다이얼로그에서 image_thumb 사용
- 디자인 비교용 미리보기 페이지 추가 (/members-preview)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 09:54:01 +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
bd7fbea082 refactor: API 클라이언트 레거시 export 삭제
마이그레이션 완료로 더 이상 사용되지 않는 개별 export 제거
- get, post, put, del
- authGet, authPost, authPut, authDel

현재 방식: api.get(), authApi.post() 등

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:35:33 +09:00
a151694630 refactor: App.jsx 라우트 분리
라우트를 플랫폼/영역별로 분리하여 관리 용이성 향상
- routes/pc/public/index.jsx: PC 공개 라우트
- routes/pc/admin/index.jsx: PC 관리자 라우트
- routes/mobile/index.jsx: Mobile 라우트
- App.jsx: 194줄 → 47줄로 간소화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:34:28 +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
3922d5c6f7 refactor(frontend): 관리자 일정 API도 새 형식에 맞게 업데이트
- admin/schedules.js에 transformSchedule 함수 추가
- AdminSchedule.jsx의 검색 로직을 schedulesApi.searchSchedules 사용으로 변경
- 직접 fetch 호출 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:35:17 +09:00
55096c8e43 refactor(frontend): API 레이어에 데이터 변환 로직 통합
- schedules.js에 transformSchedule 함수 추가
  - datetime → date, time 분리
  - category 객체 → category_id, category_name, category_color 플랫화
  - members 배열 → member_names 문자열 변환
- PC Schedule.jsx의 검색 로직을 searchSchedules 함수 사용으로 변경
- 중복 변환 로직 제거로 코드 간소화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:33:32 +09:00
9d365dcadb fix(frontend): 멤버 표시 오류 수정 및 생일 우선 정렬 추가
수정:
- AdminSchedule.jsx 1306번 라인 멤버 처리 오류 수정
- getMemberList 헬퍼 함수 사용으로 통일

생일 우선 정렬:
- PC 공개 일정 페이지: filteredSchedules에 생일 우선 정렬 추가
- PC 관리 페이지: filteredSchedules에 생일 우선 정렬 추가
- 모바일 공개 페이지: groupedSchedules, selectedDateSchedules에 생일 우선 정렬 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:26:17 +09:00
b4c393c20a fix(frontend): 검색 결과 멤버 표시 오류 수정
- getMemberList 헬퍼 함수 추가 (검색 결과/일반 데이터 모두 처리)
- 검색 결과의 members가 문자열 배열인 경우 처리
- AdminSchedule.jsx trim() 오류 수정

수정 파일:
- pc/public/Schedule.jsx
- pc/admin/AdminSchedule.jsx
- mobile/public/Schedule.jsx

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:22:44 +09:00
f483f2cf53 refactor(backend): 트랜잭션 헬퍼, JSON 스키마 추가 및 스키마 파일 분리
- src/utils/transaction.js: withTransaction 헬퍼 함수 추가
- src/schemas/: 도메인별 스키마 파일 분리 (common, album, schedule, admin, member, auth)
- 라우트에 JSON Schema 검증 및 Swagger 문서화 적용
- 트랜잭션 패턴을 withTransaction 헬퍼로 추상화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:58:07 +09:00
84113a8c48 fix(frontend): 일정 추가/수정 페이지 useEffect → useQuery 변경
- React 18 Strict Mode 중복 요청 방지
- members, categories를 useQuery로 전환
- 수정 모드 일정 로드는 useEffect 유지 (폼 상태 초기화 필요)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:26:59 +09:00
e3278c81de fix(frontend): 봇 관리 페이지 useEffect → useQuery 변경
- React 18 Strict Mode 중복 요청 방지
- getBots, getQuotaWarning을 useQuery로 전환
- toggleBot에서 queryClient.setQueryData 사용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:25:16 +09:00
46469fd324 fix(frontend): YouTube 수정 페이지 API 대응 및 사전 페이지 중복 요청 수정
- YouTubeEditForm: 변경된 API 응답 구조에 맞게 수정
  - schedule.youtube?.videoId → schedule.videoId
  - schedule.youtube?.channelName → schedule.channelName
  - schedule.date/time → schedule.datetime 파싱
- AdminScheduleDict: useEffect → useQuery 변경으로 중복 요청 방지

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:52:46 +09:00
2b24bfe0a7 일정 상세 페이지에서 콘서트 섹션 제거
- PC: ConcertSection.jsx, KakaoMap.jsx 삭제
- 모바일: ConcertSection, KakaoMap 컴포넌트 제거
- CATEGORY_ID에서 콘서트 관련 상수 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:02:22 +09:00
9eb49929c7 YouTube 섹션 스타일 개선 및 문서 업데이트
- PC/모바일 YouTube 상세 페이지 그림자 감소, 배경색 조정
- 모바일 YouTube 섹션을 카드에서 배경 스타일로 변경
- 문서 업데이트: 완료된 마이그레이션 작업 반영, 누락된 API 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:57:25 +09:00