feat(music-lab): market_trends·trend_reports DB + market.py + /api/music/market 5개 API
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,10 @@ from .db import (
|
||||
update_video_project_status, delete_video_project,
|
||||
create_revenue_record, get_all_revenue_records,
|
||||
update_revenue_record, delete_revenue_record, get_revenue_dashboard,
|
||||
get_market_trends as _get_market_trends,
|
||||
get_latest_trend_report, get_trend_reports as _get_trend_reports,
|
||||
)
|
||||
from .market import ingest_trends, get_suggestions
|
||||
from .local_provider import run_local_generation
|
||||
from .suno_provider import (
|
||||
run_suno_generation, run_suno_extend, run_vocal_removal,
|
||||
@@ -811,3 +814,47 @@ def remove_revenue(record_id: int):
|
||||
if not delete_revenue_record(record_id):
|
||||
raise HTTPException(status_code=404, detail="Record not found")
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
# ── 시장 조사 API ─────────────────────────────────────────────────────────────
|
||||
|
||||
class MarketIngestRequest(BaseModel):
|
||||
trends: list
|
||||
report_date: str = ""
|
||||
|
||||
|
||||
@app.post("/api/music/market/ingest")
|
||||
def market_ingest(req: MarketIngestRequest):
|
||||
"""agent-office → 트렌드 데이터 수신 + 리포트 생성."""
|
||||
from datetime import date
|
||||
report_date = req.report_date or date.today().isoformat()
|
||||
report = ingest_trends(req.trends, report_date)
|
||||
return {"ok": True, "trends_saved": len(req.trends), "report_date": report_date}
|
||||
|
||||
|
||||
@app.get("/api/music/market/trends")
|
||||
def list_market_trends(
|
||||
country: Optional[str] = None,
|
||||
genre: Optional[str] = None,
|
||||
source: Optional[str] = None,
|
||||
days: int = 7,
|
||||
):
|
||||
return {"trends": _get_market_trends(country, genre, source, days)}
|
||||
|
||||
|
||||
@app.get("/api/music/market/report/latest")
|
||||
def get_market_report_latest():
|
||||
report = get_latest_trend_report()
|
||||
if not report:
|
||||
raise HTTPException(status_code=404, detail="리포트 없음 — 아직 수집 전")
|
||||
return report
|
||||
|
||||
|
||||
@app.get("/api/music/market/report")
|
||||
def list_market_reports(limit: int = 10):
|
||||
return {"reports": _get_trend_reports(limit)}
|
||||
|
||||
|
||||
@app.get("/api/music/market/suggest")
|
||||
def market_suggest(limit: int = 5):
|
||||
return {"suggestions": get_suggestions(limit)}
|
||||
|
||||
Reference in New Issue
Block a user