fastapi_library/app/api/v1/api.py
2025-06-05 18:09:51 +08:00

97 lines
2.8 KiB
Python

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]