Commit graph

12 commits

Author SHA1 Message Date
e1ee0b47a0 fix: 특수 일정 ID에 연도 포함
- 생일: birthday-{year}-{name_en} (예: birthday-2025-saerom)
- 데뷔: debut-{year} (예: debut-2018)
- 주년: anniversary-{year} (예: anniversary-2026)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 13:07:39 +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
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
9515db712d feat: 전체 멤버인 경우 '프로미스나인'으로 표시
- 백엔드: buildMemberMap, getScheduleDetail 함수에서 현재 활동 멤버 전원인 경우
  "프로미스나인"으로 대체하여 반환
- 프론트엔드: getDisplayMembers 함수에서 멤버 수 계산 로직 제거 (백엔드에서 처리)
- 탈퇴 멤버(is_former=1) 제외하고 현재 활동 멤버만 계산

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:42:05 +09:00
51063a120a refactor(backend): 일정 API 공통 포맷팅 함수로 리팩토링
공통 함수 추가:
- 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>
2026-01-21 23:18:48 +09:00
22ce21f908 refactor(backend): 일정 API 응답 형식을 검색 API와 통일
변경 사항:
- getMonthlySchedules: 날짜별 그룹화 → 플랫 배열
- getUpcomingSchedules: 날짜별 그룹화 → 플랫 배열

새 형식:
{
  "schedules": [
    {
      "id": 123,
      "title": "...",
      "datetime": "2025-01-21T19:00:00",
      "category": { "id": 1, "name": "...", "color": "#..." },
      "source": { "name": "...", "url": "..." },
      "members": ["name1", "name2"]
    }
  ]
}

주요 변경:
- date/time 분리 → datetime 통합
- members: [{ name: "..." }] → ["name1", "name2"]
- categories 카운트 제거
- _rankingScore 없음 (검색 API에만 존재)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 20:47:40 +09:00
e0ab3ce0f8 fix(backend): getUpcomingSchedules 응답 형식 통일
- getUpcomingSchedules가 getMonthlySchedules와 동일한 날짜별 그룹화 형식 반환
- routes/schedules 응답 스키마에 oneOf 추가 (객체/배열 둘 다 허용)
- docs/architecture.md, migration.md 업데이트

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 20:10:26 +09:00
3ee41beb46 feat(backend): Redis 캐시 확대 - 카테고리, 앨범 목록/상세 캐싱
캐시 적용:
- 카테고리 목록: 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>
2026-01-21 16:16:09 +09:00
bfdbc08405 refactor(backend): 20단계 서비스 레이어 확대 - schedules 로직 분리
- services/schedule.js: getCategories, getScheduleDetail 함수 추가
- routes/schedules/index.js: 서비스 호출로 변경 (약 70줄 감소)
- 일관된 서비스 패턴 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:02:44 +09:00
c3e504d1e3 refactor(backend): 매직 넘버 config 이동
- 이미지 크기/품질 설정 (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>
2026-01-21 14:11:35 +09:00
430bf38c91 refactor(backend): 서비스 레이어 분리
- src/services/album.js 생성: getAlbumDetails, getAlbumsWithTracks
- src/services/schedule.js 생성: getMonthlySchedules, getUpcomingSchedules
- albums/index.js, schedules/index.js에서 서비스 사용으로 변경
- schedules/index.js에서 중복 함수 제거 (240줄 감소)

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