feat(db): add missing columns for cloud sync and alarm region data

This commit is contained in:
2026-01-21 13:49:01 +08:00
parent 2c00b5afe3
commit 1b344aeb2e
3 changed files with 121 additions and 40 deletions

View File

@@ -1,7 +1,8 @@
import json
from typing import List, Optional
from fastapi import APIRouter, Depends, HTTPException
from fastapi import APIRouter, Depends, HTTPException, Body
from pydantic import BaseModel
from sqlalchemy.orm import Session
from db.crud import (
@@ -20,6 +21,32 @@ from inference.roi.roi_filter import ROIFilter
router = APIRouter(prefix="/api/camera", tags=["ROI管理"])
class CreateROIRequest(BaseModel):
roi_id: str
name: str
roi_type: str
points: List[List[float]]
rule_type: str
direction: Optional[str] = None
stay_time: Optional[int] = None
threshold_sec: int = 360
confirm_sec: int = 30
return_sec: int = 5
class UpdateROIRequest(BaseModel):
name: Optional[str] = None
roi_type: Optional[str] = None
points: Optional[List[List[float]]] = None
rule_type: Optional[str] = None
direction: Optional[str] = None
stay_time: Optional[int] = None
enabled: Optional[bool] = None
threshold_sec: Optional[int] = None
confirm_sec: Optional[int] = None
return_sec: Optional[int] = None
def _invalidate_roi_cache(camera_id: int):
pipeline = get_pipeline()
pipeline.roi_filter.clear_cache(camera_id)
@@ -72,31 +99,22 @@ def get_roi(camera_id: int, roi_id: int, db: Session = Depends(get_db)):
@router.post("/{camera_id}/roi", response_model=dict)
def add_roi(
camera_id: int,
roi_id: str,
name: str,
roi_type: str,
points: List[List[float]],
rule_type: str,
direction: Optional[str] = None,
stay_time: Optional[int] = None,
threshold_sec: int = 360,
confirm_sec: int = 30,
return_sec: int = 5,
request: CreateROIRequest,
db: Session = Depends(get_db),
):
roi = create_roi(
db,
camera_id=camera_id,
roi_id=roi_id,
name=name,
roi_type=roi_type,
points=points,
rule_type=rule_type,
direction=direction,
stay_time=stay_time,
threshold_sec=threshold_sec,
confirm_sec=confirm_sec,
return_sec=return_sec,
roi_id=request.roi_id,
name=request.name,
roi_type=request.roi_type,
points=request.points,
rule_type=request.rule_type,
direction=request.direction,
stay_time=request.stay_time,
threshold_sec=request.threshold_sec,
confirm_sec=request.confirm_sec,
return_sec=request.return_sec,
)
_invalidate_roi_cache(camera_id)
@@ -106,7 +124,7 @@ def add_roi(
"roi_id": roi.roi_id,
"name": roi.name,
"type": roi.roi_type,
"points": points,
"points": request.points,
"rule": roi.rule_type,
"enabled": roi.enabled,
}
@@ -116,29 +134,21 @@ def add_roi(
def modify_roi(
camera_id: int,
roi_id: int,
name: Optional[str] = None,
points: Optional[List[List[float]]] = None,
rule_type: Optional[str] = None,
direction: Optional[str] = None,
stay_time: Optional[int] = None,
enabled: Optional[bool] = None,
threshold_sec: Optional[int] = None,
confirm_sec: Optional[int] = None,
return_sec: Optional[int] = None,
request: UpdateROIRequest,
db: Session = Depends(get_db),
):
roi = update_roi(
db,
roi_id=roi_id,
name=name,
points=points,
rule_type=rule_type,
direction=direction,
stay_time=stay_time,
enabled=enabled,
threshold_sec=threshold_sec,
confirm_sec=confirm_sec,
return_sec=return_sec,
name=request.name,
points=request.points,
rule_type=request.rule_type,
direction=request.direction,
stay_time=request.stay_time,
enabled=request.enabled,
threshold_sec=request.threshold_sec,
confirm_sec=request.confirm_sec,
return_sec=request.return_sec,
)
if not roi:
raise HTTPException(status_code=404, detail="ROI不存在")