galaxis-po/backend/app/api/benchmark.py

60 lines
1.7 KiB
Python
Raw Normal View History

"""
Benchmark comparison API endpoints.
"""
from typing import List
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.api.deps import CurrentUser
from app.schemas.benchmark import (
BenchmarkCompareResponse,
BenchmarkIndexInfo,
BenchmarkType,
PeriodType,
)
from app.services.benchmark import BenchmarkService
router = APIRouter(prefix="/api/benchmark", tags=["benchmark"])
@router.get("/indices", response_model=List[BenchmarkIndexInfo])
async def list_indices():
"""사용 가능한 벤치마크 목록 반환."""
return [
BenchmarkIndexInfo(
code="kospi",
name="KOSPI",
description="코스피 종합지수",
),
BenchmarkIndexInfo(
code="deposit",
name="정기예금",
description="정기예금 금리 (연 3.5%)",
),
]
@router.get("/compare/{portfolio_id}", response_model=BenchmarkCompareResponse)
async def compare_with_benchmark(
portfolio_id: int,
current_user: CurrentUser,
db: Session = Depends(get_db),
benchmark: BenchmarkType = Query(BenchmarkType.KOSPI),
period: PeriodType = Query(PeriodType.ONE_YEAR),
):
"""포트폴리오 성과를 벤치마크와 비교."""
service = BenchmarkService(db)
try:
result = service.compare_with_benchmark(
portfolio_id=portfolio_id,
benchmark_type=benchmark.value,
period=period.value,
user_id=current_user.id,
)
except ValueError as e:
raise HTTPException(status_code=404, detail=str(e))
return result