"백엔드_핵심_로직_구현_프론트엔드_연동_및_도커_배포_최적화_완료"
This commit is contained in:
87
backend/app/api/endpoints/auto_trade.py
Normal file
87
backend/app/api/endpoints/auto_trade.py
Normal file
@@ -0,0 +1,87 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, delete
|
||||
from typing import List, Optional
|
||||
from pydantic import BaseModel
|
||||
from datetime import datetime
|
||||
|
||||
from app.db.database import get_db
|
||||
from app.db.models import AutoTradeRobot
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
# --- Schema ---
|
||||
class AutoTradeConfigSchema(BaseModel):
|
||||
id: str
|
||||
stockCode: str
|
||||
stockName: str
|
||||
groupId: Optional[str] = None
|
||||
type: str
|
||||
frequency: str
|
||||
executionTime: str
|
||||
market: str
|
||||
quantity: int
|
||||
specificDay: Optional[int] = None
|
||||
trailingPercent: Optional[float] = None
|
||||
active: bool = True
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
# --- Endpoints ---
|
||||
@router.get("/configs", response_model=List[AutoTradeConfigSchema])
|
||||
async def get_auto_configs(db: AsyncSession = Depends(get_db)):
|
||||
stmt = select(AutoTradeRobot)
|
||||
res = await db.execute(stmt)
|
||||
return res.scalars().all()
|
||||
|
||||
@router.post("/configs")
|
||||
async def create_auto_config(config: AutoTradeConfigSchema, db: AsyncSession = Depends(get_db)):
|
||||
# Check exists? Upsert?
|
||||
# Frontend generates ID usually or we do. Schema has ID.
|
||||
# We will upsert (merge) or just add.
|
||||
|
||||
# Check if exists
|
||||
stmt = select(AutoTradeRobot).where(AutoTradeRobot.id == config.id)
|
||||
res = await db.execute(stmt)
|
||||
existing = res.scalar_one_or_none()
|
||||
|
||||
if existing:
|
||||
# Update
|
||||
existing.stockCode = config.stockCode
|
||||
existing.stockName = config.stockName
|
||||
existing.groupId = config.groupId
|
||||
existing.type = config.type
|
||||
existing.frequency = config.frequency
|
||||
existing.executionTime = config.executionTime
|
||||
existing.market = config.market
|
||||
existing.quantity = config.quantity
|
||||
existing.specificDay = config.specificDay
|
||||
existing.trailingPercent = config.trailingPercent
|
||||
existing.active = config.active
|
||||
else:
|
||||
# Create
|
||||
new_obj = AutoTradeRobot(
|
||||
id=config.id,
|
||||
stockCode=config.stockCode,
|
||||
stockName=config.stockName,
|
||||
groupId=config.groupId,
|
||||
type=config.type,
|
||||
frequency=config.frequency,
|
||||
executionTime=config.executionTime,
|
||||
market=config.market,
|
||||
quantity=config.quantity,
|
||||
specificDay=config.specificDay,
|
||||
trailingPercent=config.trailingPercent,
|
||||
active=config.active
|
||||
)
|
||||
db.add(new_obj)
|
||||
|
||||
await db.commit()
|
||||
return {"status": "saved", "id": config.id}
|
||||
|
||||
@router.delete("/configs/{config_id}")
|
||||
async def delete_auto_config(config_id: str, db: AsyncSession = Depends(get_db)):
|
||||
await db.execute(delete(AutoTradeRobot).where(AutoTradeRobot.id == config_id))
|
||||
await db.commit()
|
||||
return {"status": "deleted"}
|
||||
Reference in New Issue
Block a user