- 백엔드: GET /admin/concert/schedule/:seriesId (상세 조회)
- 백엔드: PUT /admin/concert/schedule/:seriesId (수정)
- 프론트엔드: ConcertEditForm 페이지 (생성 폼 컴포넌트 재사용)
- 라우트: /admin/schedule/concert/:seriesId/edit 등록
- 일정 목록: 콘서트 카테고리 편집 버튼이 수정 페이지로 연결
- schedule.js: formatSchedule에 concertSeriesId 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- include_retweets 옵션으로 리트윗 포함 여부 설정 가능
- 고정된 트윗(pinned)은 기본적으로 파싱에서 제외
- XBotDialog에서 Twitter 아이콘을 X 아이콘으로 변경
- schedule_x의 username을 source_name으로 활용
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- PC YoutubeSection에 예정 일정 placeholder UI 추가
- 예정 일정일 경우 "예정" 배지 표시
- 영상 준비 중 placeholder 컴포넌트 추가
- 예정 일정에도 channelName 반환하도록 API 수정
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 새 영상(쇼츠 제외) 추가 시 다음 주 같은 요일 예정 일정 자동 생성
- 실제 영상 업로드 시 예정 일정을 실제 정보로 덮어씌움
- 금요일 00시까지 영상 없으면 예정 일정 삭제 + 다음 주 예정 일정 생성
- autoScheduleNext 설정: dayOfWeek, time, title, deadlineDayOfWeek, excludeShorts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- DebutCard 컴포넌트 추가 (PC/모바일)
- DebutCelebrationDialog 축하 다이얼로그 추가
- Fromis9Logo SVG 컴포넌트 추가
- 기념일 카테고리 추가 (ID: 9)
- 데뷔일(2018.01.24) 및 주년 일정 자동 생성
- 폭죽 효과 추가 (fireDebutConfetti)
- 카테고리 정보 DB에서 동적 조회하도록 개선
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- datetime 필드를 date와 time 필드로 분리하여 00:00 시간도 정상 표시되도록 수정
- 백엔드: formatSchedule, Meilisearch 검색 결과, 스키마 업데이트
- 프론트엔드: datetime 파싱 로직 제거, date/time 직접 사용
- 문서: API 응답 예시 업데이트
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 백엔드: buildMemberMap, getScheduleDetail 함수에서 현재 활동 멤버 전원인 경우
"프로미스나인"으로 대체하여 반환
- 프론트엔드: getDisplayMembers 함수에서 멤버 수 계산 로직 제거 (백엔드에서 처리)
- 탈퇴 멤버(is_former=1) 제외하고 현재 활동 멤버만 계산
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
공통 함수 추가:
- normalizeDate(): 날짜 문자열 정규화
- buildDatetime(): datetime 문자열 생성
- buildSource(): source 객체 생성
- formatSchedule(): 단일 일정 포맷팅
- formatSchedules(): 일정 목록 포맷팅
- buildMemberMap(): 멤버 맵 조회
변경:
- getMonthlySchedules: 공통 함수 사용
- getUpcomingSchedules: 공통 함수 사용
- meilisearch/formatScheduleResponse: buildDatetime 공통 함수 사용
SQL 쿼리도 SCHEDULE_LIST_SQL 상수로 통합
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- getUpcomingSchedules가 getMonthlySchedules와 동일한 날짜별 그룹화 형식 반환
- routes/schedules 응답 스키마에 oneOf 추가 (객체/배열 둘 다 허용)
- docs/architecture.md, migration.md 업데이트
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
캐시 적용:
- 카테고리 목록: 1시간 TTL
- 앨범 목록: 10분 TTL
- 앨범 상세: 10분 TTL
캐시 무효화:
- 앨범 생성/수정/삭제 시 자동 무효화
- invalidateAlbumCache 함수 추가
utils/cache.js:
- TTL 상수 추가 (SHORT, MEDIUM, LONG, VERY_LONG)
- 앨범 관련 캐시 키 추가
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- services/schedule.js: getCategories, getScheduleDetail 함수 추가
- routes/schedules/index.js: 서비스 호출로 변경 (약 70줄 감소)
- 일관된 서비스 패턴 적용
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 이미지 크기/품질 설정 (800x85, 400x80) → config.image
- X 기본 사용자명 'realfromis_9' → config.x.defaultUsername
- Meilisearch 최소 점수 0.5 → config.meilisearch.minScore
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>