"""业务下发 API""" from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from pydantic import BaseModel from typing import List, Optional from app.core.database import get_db from app.services.provision_service import ProvisionService router = APIRouter(prefix="/api/provision", tags=["业务下发"]) class ProvisionRequest(BaseModel): device_id: int class BatchProvisionRequest(BaseModel): device_ids: List[int] class ProvisionResponse(BaseModel): success: bool message: str device_id: Optional[int] = None mac_address: Optional[str] = None olt_ip: Optional[str] = None port: Optional[str] = None @router.post("/service", response_model=ProvisionResponse) def provision_single_device( request: ProvisionRequest, db: Session = Depends(get_db) ): """下发业务到单个设备""" service = ProvisionService(db) result = service.provision_device(request.device_id) if result.get("success"): return ProvisionResponse( success=True, message=f"业务下发成功,MAC: {result['mac_address']}, 端口: {result['port']}", device_id=result["device_id"], mac_address=result["mac_address"], olt_ip=result.get("olt_ip"), port=result.get("port") ) else: raise HTTPException(status_code=400, detail=result.get("error", "业务下发失败")) @router.post("/batch", response_model=dict) def provision_batch_devices( request: BatchProvisionRequest, db: Session = Depends(get_db) ): """批量下发业务""" service = ProvisionService(db) result = service.batch_provision(request.device_ids) return result