refactor: backend→lotto 서비스 리네이밍 + lotto.db 레거시 테이블 스키마 제거
- backend/ → lotto/ 디렉토리 이동 - docker-compose: lotto-backend→lotto, lotto-frontend→frontend - deploy scripts, nginx, agent-office config 네이밍 일괄 반영 - lotto/app/db.py에서 todos·blog_posts CREATE TABLE 제거 (personal로 이관 완료) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
53
lotto/app/routers/briefing.py
Normal file
53
lotto/app/routers/briefing.py
Normal file
@@ -0,0 +1,53 @@
|
||||
"""브리핑 저장/조회 + 큐레이터 사용량 엔드포인트."""
|
||||
from typing import Any, Dict, List
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel, Field
|
||||
from .. import db
|
||||
|
||||
router = APIRouter(prefix="/api/lotto")
|
||||
|
||||
|
||||
class BriefingRequest(BaseModel):
|
||||
draw_no: int
|
||||
picks: List[Dict[str, Any]]
|
||||
narrative: Dict[str, Any]
|
||||
confidence: int = Field(ge=0, le=100)
|
||||
model: str
|
||||
tokens_input: int = 0
|
||||
tokens_output: int = 0
|
||||
cache_read: int = 0
|
||||
cache_write: int = 0
|
||||
latency_ms: int = 0
|
||||
source: str = "auto"
|
||||
|
||||
|
||||
@router.post("/briefing", status_code=201)
|
||||
def save_briefing(body: BriefingRequest):
|
||||
bid = db.save_briefing(body.model_dump())
|
||||
return {"ok": True, "id": bid}
|
||||
|
||||
|
||||
@router.get("/briefing/latest")
|
||||
def latest():
|
||||
b = db.get_latest_briefing()
|
||||
if not b:
|
||||
raise HTTPException(404, "no briefing yet")
|
||||
return b
|
||||
|
||||
|
||||
@router.get("/briefing/{draw_no}")
|
||||
def get_one(draw_no: int):
|
||||
b = db.get_briefing(draw_no)
|
||||
if not b:
|
||||
raise HTTPException(404, f"no briefing for draw {draw_no}")
|
||||
return b
|
||||
|
||||
|
||||
@router.get("/briefing")
|
||||
def history(limit: int = 10):
|
||||
return {"briefings": db.list_briefings(limit)}
|
||||
|
||||
|
||||
@router.get("/curator/usage")
|
||||
def usage(days: int = 30):
|
||||
return db.get_curator_usage(days)
|
||||
Reference in New Issue
Block a user