from typing import List, Optional from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.crud.event import event from app.schemas.event import EventList, EventDetail, EventUpdate, EventQuery, TestEvent router = APIRouter() @router.get("/hello") async def get_hello(): return {"data":"hello"} # 路径 /events response_model 自动将返回数据序列化为EventList模型的列表格式. @router.get("/events", response_model=List[EventList]) async def get_events( db: AsyncSession = Depends(get_db), # 数据库依赖注入 start_time: Optional[str] = None, end_time: Optional[str] = None, etypeName: Optional[str] = None, area: Optional[str] = None, skip: int = Query(0, ge=0), limit: int = Query(100, ge=1, le=1000) ): """ 获取事件列表 - 支持时间范围查询 - 支持事件类型和区域筛选 - 支持分页 """ query = EventQuery( start_time=start_time, end_time=end_time, etypeName=etypeName, area=area, skip=skip, limit=limit ) events = await event.get_multi_with_query(db, query=query) # 3. 序列化返回结果 return [EventList.model_validate(event) for event in events] @router.get("/events/{event_id}", response_model=EventDetail) async def get_event( event_id: str, db: AsyncSession = Depends(get_db) ): """ 获取事件详情 """ event_obj = await event.get_by_id(db, event_id=event_id) if not event_obj: raise HTTPException(status_code=404, detail="事件不存在") return EventDetail.model_validate(event_obj) @router.put("/events/{event_id}", response_model=EventDetail) async def update_event( event_id: str, event_in: EventUpdate, db: AsyncSession = Depends(get_db) ): """ 更新事件信息 """ event_obj = await event.update_event( db, event_id=event_id, obj_in=event_in ) if not event_obj: raise HTTPException(status_code=404, detail="事件不存在") return EventDetail.model_validate(event_obj) @router.delete("/events/{event_id}", response_model=EventDetail) async def delete_event( event_id: str, db: AsyncSession = Depends(get_db) ): """ 删除事件 """ event_obj = await event.delete_event(db, event_id=event_id) if not event_obj: raise HTTPException(status_code=404, detail="事件不存在") return EventDetail.model_validate(event_obj) # 响应类型要写对啊 @router.get("/testEvent", response_model=List[TestEvent]) async def testEvent( db: AsyncSession = Depends(get_db) ): event_obj = await event.get_test(db) return event_obj # return [TestEvent.model_validate(event) for event in event_obj]