Commit graph

22 commits

Author SHA1 Message Date
edf6b60b4a refactor: 일정 페이지 상태 관리를 zustand store로 변경
- Schedule.jsx에서 useState 대신 useScheduleStore 사용
- 상세 페이지 이동 후에도 선택한 날짜/카테고리/검색어 유지
- X 상세 페이지 UI 개선 (X 아이콘 제거, 날짜 형식 변경)
- X 프로필 URL 디코딩 로직 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 15:19:44 +09:00
4f0cf724d0 feat: X 카테고리 상세 페이지 및 프로필 캐싱 기능 추가
- X 봇에서 Nitter 프로필 정보(이름, 아바타) 추출 및 Redis 캐싱
- X 프로필 조회 API 추가 (/api/schedules/x-profile/:username)
- X 상세 페이지 UI 구현 (트위터 카드 스타일)
- X 카테고리 클릭 시 상세 페이지로 이동하도록 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 14:51:59 +09:00
2ebee0682c fix(backend/x-bot): 고정 트윗 다음 트윗이 무시되는 버그 수정
- 고정 트윗 체크 로직이 이전 컨테이너를 참조하여 다음 트윗도 고정으로 판단하는 버그 수정
- 현재 컨테이너 내에 'class="pinned"'가 있는지만 확인하도록 변경

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 14:02:53 +09:00
02fe9314e4 fix(suggestions): 동적 임계값으로 추천 검색어 필터링
- 최대 검색 횟수의 1% 또는 최소 10회 중 더 큰 값 적용
- GREATEST(MAX(count) * 0.01, 10) 사용
- 데이터가 적을 때도 오타 필터링 가능

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 22:49:35 +09:00
d1bd82929b X 봇: 카테고리 ID 수정 (X=3, YouTube=2) 2026-01-12 21:07:06 +09:00
9d04c0de91 feat(Suggestions): 일정 검색 기반 영어/한글 오타 판단
- 영어 입력 시 Meilisearch로 일정 검색하여 언어 판단
- 영어로 결과 있으면 영어, 한글 변환으로 결과 있으면 한글 오타
- 휴리스틱 대신 실제 데이터 기반 판단으로 정확도 향상
- fm1.24는 영어, vmfhaltmskdls는 프로미스나인으로 변환
2026-01-12 09:07:54 +09:00
727b05f0f5 feat(Search): Redis 기반 bi-gram 추천 검색어 시스템 구현
- MariaDB 테이블 추가 (search_queries, word_pairs)
- Redis 컨테이너 추가 (Sorted Set 캐싱)
- 백엔드 suggestions 서비스 및 API 구현
- 검색 실행 시 검색어 저장 (bi-gram 학습)
- PC Schedule 프론트엔드 연동 완료
2026-01-11 21:33:55 +09:00
0e6e13fe65 refactor: 백엔드에 dayjs 도입 및 날짜 유틸리티 통합
- lib/date.js: dayjs 기반 공통 날짜 유틸리티 모듈 추가
  - toKST, formatDate, formatTime, utcToKSTDateTime, nowKST
  - parseNitterDateTime (Nitter 날짜 파싱)
  - dayjs/plugin/utc, timezone, customParseFormat 사용

- youtube-bot.js: 로컬 날짜 함수 제거, lib/date.js 사용
- x-bot.js: 로컬 날짜 함수 제거, lib/date.js 사용

- 중복 코드 제거로 유지보수성 향상
2026-01-10 19:44:07 +09:00
a3960489d4 fix: Meilisearch 검색 유사도 필터링 추가
- 유사도 0.5 미만인 검색 결과 필터링
- showRankingScore 활성화하여 점수 기반 필터링 적용
2026-01-10 19:06:49 +09:00
622839b0e8 feat: Meilisearch 동기화 봇 추가 및 시간대 관련 수정
봇 시스템:
- Meilisearch 동기화 봇 추가 (meilisearch-bot.js)
- bots 테이블 type enum에 meilisearch 추가
- youtube-scheduler.js에 meilisearch 봇 분기 추가
- admin.js API에서 meilisearch 봇 지원

봇 관리 페이지 개선 (AdminScheduleBots.jsx):
- Meilisearch 공식 로고 아이콘 추가
- Meilisearch 봇 통계: 동기화 수/소요 시간 표시
- 봇 타입별 배경색 (X: 검정, Meilisearch: #ddf1fd, YouTube: 빨강)

시간대 정리:
- MariaDB KST 설정으로 DATE_ADD(NOW(), INTERVAL 9 HOUR) → NOW() 변경
- youtube-bot.js, x-bot.js에서 10곳 수정
2026-01-10 18:59:39 +09:00
8780384164 fix(x-bot): 유튜브 일정에 채널명(source_name) 추가
- createScheduleFromYoutube에서 video.channelTitle을 source_name에 저장
- Meilisearch 동기화 시에도 source_name 포함
2026-01-10 18:26:43 +09:00
59e5a1d47b feat: X 봇 구현 및 봇 관리 기능 개선
- X 봇 서비스 추가 (x-bot.js)
  - Nitter를 통한 @realfromis_9 트윗 수집
  - 트윗을 일정으로 자동 저장 (카테고리 12)
  - 관리 채널 외 유튜브 링크 감지 시 별도 일정 추가
  - 1분 간격 동기화 지원

- DB 스키마 변경
  - bots.type enum 수정 (vlive, weverse 제거, x 추가)
  - bot_x_config 테이블 추가

- 봇 스케줄러 수정 (youtube-scheduler.js)
  - 봇 타입별 동기화 함수 분기 (syncBot)
  - X 봇 지원 추가

- 관리자 페이지 개선 (AdminScheduleBots.jsx)
  - 봇 타입별 아이콘 표시 (YouTube/X)
  - X 아이콘 SVG 컴포넌트 추가

- last_added_count 로직 수정
  - 추가 항목 없으면 이전 값 유지 (0으로 초기화 방지)

- 기존 X 일정에서 유튜브 영상 추출 스크립트 추가
2026-01-10 17:06:23 +09:00
330eb46ff4 fix: 봇 상태 동기화 로직 개선
- syncBotStatuses에서 bot.id를 parseInt로 변환
- 메모리에 없는 running 봇을 stopped로 변경하는 대신 재등록
- 서버 재시작 시에도 봇이 자동으로 유지되도록 개선
2026-01-09 19:37:29 +09:00
b161f1a9f7 fix: 봇 스케줄러 botId 타입 불일치 수정
- registerBot, unregisterBot, isBotRunning에서 botId를 parseInt()로 정수 변환
- URL 파라미터(문자열)와 DB 조회 결과(숫자) 간 타입 일치 문제 해결
- 10초 상태 동기화에서 메모리 스케줄러를 찾지 못해 stopped로 변경되던 버그 수정
2026-01-09 19:31:11 +09:00
20546599cc feat: YouTube API 할당량 경고 시스템 구현
- RSS 방식에서 YouTube API 방식으로 변경 (최근 10개 영상 조회)
- rss_url 컬럼 삭제
- Google Cloud Webhook으로 할당량 경고 수신
- 95% 도달 시 봇 자동 중지
- LA 시간 자정(할당량 리셋)에 봇 자동 재시작
- 봇 관리 페이지에 경고 배너 표시
2026-01-07 23:54:35 +09:00
c54de2ba82 feat: useInfiniteQuery 기반 무한 스크롤 구현 및 UI 개선
- react-infinite-scroll-component를 useInfiniteQuery + useInView로 대체
- Schedule.jsx, AdminSchedule.jsx에 안정적인 무한 스크롤 적용
- source_name에 Link2 아이콘 추가 (카테고리 오른쪽 인라인 표시)
- 멤버 5명 이상일 경우 '프로미스나인'으로 표시 (탈퇴 멤버 고려)
- AdminSchedule 일반 모드에서 members 배열도 확인하여 멤버 표시
- QueryClientProvider 설정 추가 (main.jsx)
2026-01-06 19:48:43 +09:00
217746af3e 봇 관리 UI 개선
- 카드 그리드 레이아웃으로 변경
- 통계 분리: 총 추가 / 마지막 추가 / 업데이트 간격
- DB에 last_added_count 컬럼 추가
- 업데이트 시간을 봇 이름 아래에 표시
- 마지막 추가된 개수 초록색 강조
2026-01-06 11:42:47 +09:00
068c5ffbbb Meilisearch 검색 기능 개선
- 검색 결과 유사도순 정렬 (동일 유사도 시 최신 날짜 우선)
- 프론트엔드 검색 재정렬 제거 (Meilisearch 순서 유지)
- 관리자 일정 페이지 Meilisearch 검색 적용
- 일정 수정 시 Meilisearch 동기화 추가
- 서버 시작 시 자동 동기화
- 멤버 이름 쉼표 구분으로 통일
2026-01-06 08:46:10 +09:00
346d6529f2 Meilisearch 검색 엔진 도입
- Docker Compose에 Meilisearch 서비스 추가
- meilisearch.js 서비스 생성 (초기화, CRUD, 검색)
- 공개 일정 API에 Meilisearch 검색 통합
- 일정 생성/삭제 시 Meilisearch 자동 동기화
- YouTube 봇 일정 추가 시 Meilisearch 동기화
- sync-search API 추가 (기존 데이터 일괄 동기화)
- 다중 키워드, 오타 허용, 유사어 검색 지원
2026-01-06 08:22:43 +09:00
52332babea 일정 관리 기능 개선: 봇 스케줄러 리팩토링, 멤버 표시, UI 개선
- 봇 스케줄러: 서버 시작 시 자동 초기화, 10초 간격 상태 동기화
- DB 리팩토링: bots 테이블에서 YouTube 컬럼 분리, bot_youtube_config 활용
- 봇별 커스텀 설정: BOT_CUSTOM_CONFIG 상수로 코드 내 관리
- 공개/관리자 일정 목록에 멤버 태그 표시 (5명 이상이면 '프로미스나인')
- 일정 목록 글씨 크기 증가 및 UI 개선
- source_name 관리자 일정에 뱃지로 표시
- 봇 시작/정지 토스트에 봇 이름 포함
2026-01-06 00:27:35 +09:00
e216539f34 feat(bot): studiofromis_9 채널 봇 추가 및 cron 표현식 지원
- .env에 YouTube API 키 추가
- bots 테이블에 channel_id, rss_url, cron_expression 컬럼 추가
- youtube-scheduler.js: cron_expression 파라미터 지원
- youtube-bot.js: bots 테이블에서 직접 조회, Shorts 필터링 제거
- studiofromis_9 봇 등록 (채널: UCW0ORl7mZO8wIWkgtq-yzjQ, cron: 1,2 * * * *)
2026-01-05 22:26:44 +09:00
1b01182028 feat: 일정 봇 자동화 및 검색 기능 추가
- YouTube 일정 봇 서비스 추가 (youtube-bot.js, youtube-scheduler.js)
- 공개 일정 API 라우터 추가 (schedules.js)
- 관리자 일정 봇 관리 페이지 추가 (AdminScheduleBots.jsx)
- 백엔드 의존성 업데이트
2026-01-05 22:16:02 +09:00