- Base URL: apicast.suno.ai → api.sunoapi.org/api/v1
- 생성: POST /generate (customMode, model, instrumental 필드)
- 폴링: GET /generate/record-info?taskId=xxx (PENDING→SUCCESS)
- 가사: /lyrics 비동기 폴링 방식으로 변경
- 응답 필드: camelCase (audioUrl, imageUrl, sunoData) 대응
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Dockerfile: util-linux 패키지 추가 (flock 명령어 제공)
- deploy.sh: 헬스체크 URL을 Docker 서비스명 → localhost 호스트 포트로 변경
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- backend/main.py: logging 모듈 도입, print() 제거
- stock-lab/main.py: print() → logger 전환, _calc_portfolio_totals 공용 함수 추출
- stock-lab/scraper.py: logging 모듈 도입, print() 제거
- docker-compose.yml: 전 서비스 healthcheck 블록 추가 (30s 간격, 3회 재시도)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- POST /api/stock/ai-coach: Anthropic API 프록시 (API 키 서버 보관)
- trade/balance, trade/order: ADMIN_API_KEY 헤더 인증 추가
- print() → logging 모듈 전환 (stock-lab)
- .env.example: ADMIN_API_KEY, ANTHROPIC_API_KEY, CORS_ALLOW_ORIGINS 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- travel-proxy: get_thumb NameError 수정 및 경로 조작 방어
- stock-lab, music-lab: CORS allow_origins=* → 환경변수 기반 도메인 제한
- travel-proxy, deployer: /health 엔드포인트 추가
- 전 서비스 .dockerignore 추가 (.git, __pycache__, .env 제외)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- analyzer.py: generate_combined_recommendation() 함수 추가
빈도Z(25%)·조합지문(30%)·갭(20%)·공동출현(15%)·다양성(10%) 가중 투표
- main.py: GET /api/lotto/recommend/combined 엔드포인트 추가
결과를 태그 "종합추론"으로 recommendations 테이블에 저장
- main.py: GET /api/lotto/recommend/combined/history 엔드포인트 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
프롬프트 생성/복사 방식으로 전환하여 더 이상 불필요한
/api/stock/ai-analysis 엔드포인트, ai_analyst.py, google-generativeai 패키지 제거
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
docker-compose.yml stock-lab environment에 GEMINI_API_KEY, GEMINI_MODEL 추가.
.env에 값이 있어도 컨테이너에 전달 안 됐던 문제 수정.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ai_analyst.py 신규: Gemini Pro 연동 포트폴리오 분석 모듈
- 보유 종목 현재가 + 뉴스 기반 프롬프트 생성
- 종목별 매도/매수/분할매도 행동 지침 포함
- 5분 메모리 캐시 (force 파라미터로 강제 갱신 가능)
- GET /api/stock/ai-analysis 엔드포인트 추가
- requirements.txt: google-generativeai>=0.8.0 추가
환경변수 필요: GEMINI_API_KEY (Google AI Studio)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
변수 기반 proxy_pass는 하위 경로(library, generate 등)를 자동 치환하지
않으므로 $request_uri로 전체 경로를 그대로 전달하도록 수정.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- frontend depends_on music-lab 추가 (시작 순서 보장)
- /api/music/ location에 resolver 127.0.0.11 + 변수 proxy_pass 적용
(Nginx 시작 시점에 music-lab이 미준비여도 기동 가능)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
GenerateRequest에 title 필드 추가.
프론트가 "Lo-Fi — Chill Mix"를 보내면 그대로 저장,
미전송 시 "{genre} — {mood} Mix" 자동 생성.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 이중 저장 방지: auto-register 유지, Save 버튼 제거는 프론트 담당 (방식 A)
- title 자동 생성: "{genre} — {mood} Mix" 형식으로 개선
- audio_url 절대경로 제거: 항상 /media/music/{task_id}.mp3 상대경로 반환
- status succeeded 시 track 메타데이터 포함 (프론트 Save 버튼 없이 즉시 UI 반영 가능)
- get_track_by_task_id() 함수 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- music-lab/ 신규 서비스 (포트 18600)
- POST /api/music/generate 비동기 음악 생성 (task_id 반환)
- GET /api/music/status/:id 폴링 (queued→processing→succeeded/failed)
- GET /api/music/library 라이브러리 조회
- POST /api/music/library 트랙 수동 추가
- DELETE /api/music/library/:id 트랙 삭제 (파일 포함)
- SQLite: music_tasks + music_library 테이블
- 생성 완료 시 라이브러리 자동 등록
- AI 서버 응답: binary audio / JSON audio_url 모두 지원
- nginx: /api/music/ 프록시 + /media/music/ 오디오 파일 직접 서빙
- docker-compose: music-lab 서비스 + frontend 볼륨 마운트 추가
- CLAUDE.md 업데이트
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
매 요청마다 전체 recommendations 조회하던 구조를 캐시로 개선.
갱신 시점: 새 회차 채점 직후(_sync_and_check) + TTL 1시간 만료 폴백
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- purchase_history 테이블 추가 (draw_no, amount, sets, prize, note)
- weekly_reports 캐시 테이블 추가 (drw_no UNIQUE, report JSON)
- GET /api/lotto/purchase 구매 이력 조회 (draw_no, days 필터)
- POST /api/lotto/purchase 구매 이력 추가
- PUT /api/lotto/purchase/:id 구매 이력 수정 (당첨금 업데이트)
- DELETE /api/lotto/purchase/:id 구매 이력 삭제
- GET /api/lotto/purchase/stats 투자 수익률 통계
- GET /api/lotto/analysis/personal 개인 패턴 분석 (top/least picks, 홀짝/구간/연속번호)
- GET /api/lotto/report/history 저장된 주간 리포트 목록
- GET /api/lotto/report/:drw_no 캐시 우선 조회 + cached 플래그
- 스케줄러: 토요일 09:00 주간 리포트 자동 생성 및 DB 캐싱
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- GET /api/lotto/stats/performance: 채점 이력 기반 성과 통계
(평균 일치 수, 등수 분포, 무작위 대비 개선율)
- GET /api/lotto/report/latest: 다음 회차 공략 리포트 자동 생성
- GET /api/lotto/report/{drw_no}: 특정 회차 공략 리포트
(과출현/냉각/오버듀 번호, 최근 패턴, 3가지 전략 추천, 신뢰도 점수)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- sell_history 테이블 신규 생성 (db.py init_db)
- CRUD 함수 추가: add_sell_history, get_sell_history, delete_sell_history
- GET /api/portfolio/sell-history (broker, days 필터)
- POST /api/portfolio/sell-history (id 포함 저장된 레코드 반환)
- DELETE /api/portfolio/sell-history/{record_id}
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- subscription_items 테이블: 청약 목록 CRUD (GET/POST/PUT/DELETE)
- subscription_profile 테이블: 내 청약 조건 프로필 싱글톤 (GET/PUT, upsert)
- specialQuals JSON 배열, bool → int SQLite 변환 처리
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>