Commit graph

103 commits

Author SHA1 Message Date
de3adc0ad6 refactor: 예능 상세 페이지 썸네일/정보 분리 레이아웃
- 가로 flex → 세로 분리 (썸네일 카드 + 정보 카드)
- 썸네일: object-contain으로 원본 비율 유지, max-h 제한
- 기본 이미지: 카테고리 색상 배경 + Tv 아이콘
- 제목이 길어져도 레이아웃 깨지지 않음
- PC/모바일 모두 적용

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 14:03:48 +09:00
2a1849f608 feat: 예능 썸네일 없을 때 카테고리 색상 기본 이미지 표시
- 썸네일 없으면 카테고리 색상 배경 + Tv 아이콘 표시
- PC/모바일 모두 적용
- 항상 flex 레이아웃 유지 (썸네일 유무와 무관)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:58:57 +09:00
83dd852ffb style: 예능 다시보기 버튼을 다크 스타일로 변경
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:54:49 +09:00
de1399579f style: 예능 상세 텍스트 크기 전체적으로 확대
- 방송사 뱃지/날짜: text-xs → text-sm
- 제목: text-lg → text-xl
- 멤버 칩: text-xs → text-sm, 패딩 증가
- 다시보기 버튼: text-xs → text-sm, 패딩 증가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:53:11 +09:00
b1d890d758 style: 예능 상세 레이아웃 상단/하단 분리
- 방송사+날짜, 제목, 멤버: 상단에 붙임
- 다시보기 버튼: mt-auto로 하단에 고정
- justify-between으로 세로 공간 분배

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:52:12 +09:00
c990af41e1 style: 예능 상세 페이지 디자인 정리
- 썸네일 hover 효과 제거, 너비 w-44로 축소
- 다시보기 버튼: 멤버 칩과 같은 줄에 compact하게 배치 (회색 pill)
- 불필요한 border-t 구분선 제거
- 전체적으로 compact한 레이아웃

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:51:09 +09:00
fcbda88464 fix: 예능 상세 썸네일을 세로 포스터 레이아웃으로 변경
- 가로 전체 → 왼쪽 세로 포스터(w-52) + 오른쪽 콘텐츠 (flex 레이아웃)
- 세로 이미지가 잘리지 않도록 object-cover + 고정 너비

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:48:12 +09:00
36854a223f style: PC 예능 상세 페이지 디자인 개선
- 썸네일: aspect-video 비율, hover 시 확대 + 재생 버튼 오버레이
- 방송사 뱃지: 카테고리 색상 기반, 날짜와 한 줄로 배치
- 다시보기 버튼: 다크 pill 스타일, 유튜브면 Play 아이콘
- 전체 카드 레이아웃으로 통일

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:46:31 +09:00
6feedae267 feat: PC 예능 일정 상세 페이지 추가
- VarietySection: 썸네일, 방송사 뱃지, 제목, 날짜/시간, 멤버, 다시보기 버튼
- ScheduleDetail에서 '예능' 카테고리 분기 연결

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 13:45:14 +09:00
af6b3e1654 style: X 게시글 하이퍼링크 색상을 파란색으로 변경 (해시태그와 구분)
- 해시태그: primary (초록)
- URL 링크: blue-500 (파란)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 19:36:03 +09:00
1f3c2f3d9b feat: X 게시글 해시태그 하이라이트 및 클릭 링크 추가
- 해시태그(#xxx): primary 색상 하이라이트, 클릭 시 x.com/hashtag/xxx로 이동
- URL: primary 색상 + 밑줄, 클릭 시 해당 URL로 이동
- 웹(모바일/PC), 앱 모두 적용

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 14:15:58 +09:00
9d18449d3a feat: 생일 축하 다이얼로그 추가 (PC/모바일)
생일 당일 접속 시 폭죽과 함께 멤버 사진, HAPPY OOO DAY 제목,
날짜를 보여주는 축하 다이얼로그 표시. 데뷔 다이얼로그와 동일하게
localStorage로 하루 1회만 표시.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 13:39:55 +09:00
8effebf681 fix: 로그 시간 KST 중복 보정, 일정 카운트 애니메이션, HMR 오버레이 비활성화
- 로그 formatDateTime에서 UTC 메서드 사용하여 KST 이중 변환 방지
- 일반 일정 페이지 n개 일정 텍스트에 모드 전환 애니메이션 적용
- Vite HMR 오버레이 비활성화 (외부 봇 malformed URI 에러 방지)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 21:49:13 +09:00
406098d1b9 fix(schedule): X 일정에서 단축 URL 인식 개선
- react-linkify 대신 커스텀 linkifyText 함수 사용
- bit.ly, t.co, youtu.be 등 단축 URL 도메인 지원
- PC, 모바일 양쪽 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 22:28:41 +09:00
f90a5f4b17 refactor(members): PC 멤버 페이지 2/3 배열 레이아웃으로 변경
- 5열에서 2/3 배열로 변경
- 카드 크기 축소 (max-w-3xl)
- 첫 줄 2명, 둘째 줄 3명 가운데 정렬

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 22:20:56 +09:00
d50488d7e3 refactor(members): PC 멤버 페이지 3열 레이아웃 + 마지막 줄 가운데 정렬
- 5열에서 3열 레이아웃으로 변경
- max-w-4xl로 카드 크기 축소
- flexbox로 마지막 줄 가운데 정렬

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 22:15:51 +09:00
45da9c6277 feat(members): 전 멤버 섹션 제거
- PC 멤버 페이지에서 전 멤버 섹션 제거
- 모바일 멤버 페이지에서 전 멤버 섹션 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 22:10:47 +09:00
9163ade56d feat(schedule): 달력 및 일정 목록 영역에 진입 애니메이션 추가
- 왼쪽 영역(달력, 카테고리): 왼쪽에서 슬라이드 인
- 오른쪽 영역(일정 목록): 오른쪽에서 슬라이드 인
- 타이틀 애니메이션과 연속되도록 delay 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 22:09:11 +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
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
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
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
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
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
bdd5b90870 YouTube 상세 페이지 API 응답 구조 변경 대응
- schedule.source.url → schedule.videoUrl
- schedule.source.name → schedule.channelName
- schedule.date/time → schedule.datetime
- videoId를 URL에서 추출 대신 API에서 직접 사용
- formatXDateTime 유틸리티 사용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:24:14 +09:00
beabcc094f 라이트박스 닫기 시 이전 페이지로 이동하는 버그 수정
- ref를 사용해 히스토리 push 상태 추적
- X 버튼 클릭 시 히스토리가 push된 경우에만 history.back() 호출
- 하드웨어 백버튼과 X 버튼 닫기 동작 분리

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:17:24 +09:00
e1a07f4849 X 날짜 포맷팅을 dayjs 기반 유틸리티로 통합
- formatXDateTime 함수를 utils/date.js로 이동
- PC/모바일 XSection에서 공통 유틸리티 사용
- 사용하지 않는 closeLightbox 변수 제거

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:10:08 +09:00
67e9992cf1 라이트박스 뒤로가기 버튼 처리 추가
- PC/모바일 앨범 상세, 갤러리 페이지에 뒤로가기 처리
- PC/모바일 X 일정 상세 페이지에 뒤로가기 처리
- 라이트박스 열릴 때 history.pushState 호출
- popstate 이벤트로 라이트박스 닫기

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:05:36 +09:00
d8055c00e5 X 일정 상세 페이지에 이미지 라이트박스 추가
- PC/모바일 XSection에 라이트박스 기능 추가
- 이미지 클릭 시 전체 화면으로 보기
- 좌우 화살표로 이미지 탐색
- 인디케이터로 현재 이미지 위치 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 11:59:23 +09:00
f797736f8e Revert "달력에서 카테고리 필터 적용"
This reverts commit 0c278597c0.
2026-01-21 11:54:12 +09:00
0c278597c0 달력에서 카테고리 필터 적용
- PC/모바일 일정 페이지 달력의 점에 카테고리 필터 적용
- 선택된 카테고리의 일정만 달력에 점으로 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 11:50:13 +09:00
1d17c83568 X 일정 상세 페이지 개선
- API 응답 형식 변경 (category_id → category.id)
- X 일정에 content, imageUrls, postUrl, profile 필드 추가
- 본문 내 URL 자동 하이퍼링크 추가 (react-linkify)
- PC/모바일 ScheduleDetail에서 새 API 형식 사용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 11:41:39 +09:00
f780e91f14 feat: 메인 페이지 일정 API 및 디자인 개선
- 백엔드에 startDate 파라미터 지원 추가 (다가오는 일정 조회)
- handleUpcomingSchedules 함수 구현
- 메인 페이지 일정 카드 디자인을 일정 페이지와 동일하게 변경
- 멤버 표시 로직 API 응답에 맞게 수정 (PC/모바일)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:27:31 +09:00
8e15cd6d2c refactor: UI 개선 및 날짜 제한 수정
- 멤버 페이지에서 포지션 영역 제거 (PC/모바일)
- 모바일 일정 페이지 멤버 표시 로직 API 응답에 맞게 수정
- 데이트픽커 연도 제한 2025 → 2017로 변경
- 2017년 1월에서 이전 달 버튼 비활성화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 16:17:54 +09:00
4a4a163abe feat: YouTube 일정 수정 폼 구현
- YouTube 일정 수정 API (PUT /api/admin/youtube/schedule/:id)
- 멤버 선택, 영상 유형(video/shorts) 수정 기능
- 일정 API에 멤버 배열 추가 (5명 이상 시 "프로미스나인")
- 관리 페이지 React Query 캐싱 적용
- Shorts/Video 별 UI 레이아웃 분리
- React Query 사용 가이드 문서화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 14:06:02 +09:00