"백엔드_핵심_로직_구현_프론트엔드_연동_및_도커_배포_최적화_완료"

This commit is contained in:
2026-02-03 00:52:54 +09:00
parent ed8fc0943b
commit eeddc62089
32 changed files with 1287 additions and 318 deletions

View 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"}