2025-08-02 12:38:52 +08:00

59 lines
2.3 KiB
Python

from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Any
from datetime import datetime
class EventBase(BaseModel):
event_type: str = Field(..., description="事件类型")
device_id: int = Field(..., description="关联设备ID")
algorithm_id: Optional[int] = Field(None, description="关联算法ID")
severity: str = Field("medium", description="严重程度")
status: str = Field("pending", description="事件状态")
confidence: Optional[float] = Field(None, description="置信度")
bbox: Optional[str] = Field(None, description="边界框坐标")
image_path: Optional[str] = Field(None, description="事件图片路径")
video_path: Optional[str] = Field(None, description="事件视频路径")
description: Optional[str] = Field(None, description="事件描述")
location: Optional[str] = Field(None, description="事件发生位置")
detected_objects: Optional[str] = Field(None, description="检测到的对象")
processing_time: Optional[float] = Field(None, description="处理时间")
is_alert: bool = Field(False, description="是否触发告警")
alert_sent: bool = Field(False, description="是否已发送告警")
operator_id: Optional[int] = Field(None, description="处理人员ID")
resolution_notes: Optional[str] = Field(None, description="处理备注")
class EventCreate(EventBase):
pass
class EventUpdate(BaseModel):
event_type: Optional[str] = None
device_id: Optional[int] = None
algorithm_id: Optional[int] = None
severity: Optional[str] = None
status: Optional[str] = None
confidence: Optional[float] = None
bbox: Optional[str] = None
image_path: Optional[str] = None
video_path: Optional[str] = None
description: Optional[str] = None
location: Optional[str] = None
detected_objects: Optional[str] = None
processing_time: Optional[float] = None
is_alert: Optional[bool] = None
alert_sent: Optional[bool] = None
operator_id: Optional[int] = None
resolution_notes: Optional[str] = None
class EventResponse(EventBase):
id: int
created_at: datetime
updated_at: datetime
resolved_at: Optional[datetime] = None
class Config:
from_attributes = True
class EventListResponse(BaseModel):
events: List[EventResponse]
total: int
page: int
size: int