Files
trumpsignal-backend/app/api/trades.py
T
2026-04-20 23:05:59 +08:00

47 lines
1.3 KiB
Python

import logging
from typing import List
from fastapi import APIRouter, Depends, Query
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.database import get_db
from app.models import BotTrade
from app.schemas import BotTrade as BotTradeSchema
router = APIRouter()
logger = logging.getLogger(__name__)
def _trade_to_schema(trade: BotTrade) -> BotTradeSchema:
return BotTradeSchema(
id=trade.id,
asset=trade.asset,
side=trade.side,
entry_price=trade.entry_price,
exit_price=trade.exit_price or 0.0,
pnl_usd=trade.pnl_usd or 0.0,
hold_seconds=trade.hold_seconds or 0,
trigger_post_id=trade.trigger_post_id or 0,
opened_at=trade.opened_at.isoformat(),
closed_at=trade.closed_at.isoformat() if trade.closed_at else "",
)
@router.get("/trades", response_model=List[BotTradeSchema])
async def get_trades(
limit: int = Query(default=20, ge=1, le=100),
page: int = Query(default=1, ge=1),
db: AsyncSession = Depends(get_db),
):
offset = (page - 1) * limit
result = await db.execute(
select(BotTrade)
.where(BotTrade.closed_at.is_not(None))
.order_by(BotTrade.opened_at.desc())
.offset(offset)
.limit(limit)
)
trades = result.scalars().all()
return [_trade_to_schema(t) for t in trades]