103 lines
2.9 KiB
Python
103 lines
2.9 KiB
Python
from typing import List, Optional
|
|
from fastapi import APIRouter, Depends, HTTPException, Query, Body
|
|
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, BackStageEvent, BackStageEventDto, BackStageEventDetail
|
|
|
|
import datetime
|
|
|
|
router = APIRouter()
|
|
|
|
@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)
|
|
return [EventList.model_validate(event) for event in events]
|
|
|
|
# 后台获取事件列表
|
|
@router.post("/backstageEventlist", response_model=List[BackStageEvent])
|
|
async def get_events_backstage(
|
|
db: AsyncSession = Depends(get_db),
|
|
query: BackStageEventDto = Body(...)
|
|
|
|
):
|
|
|
|
events = await event.get_multi_backstage_events(db, query=query)
|
|
return events
|
|
|
|
# 后台获取事件详情
|
|
@router.get("/backstageEventDetail/{eventId}")
|
|
async def get_event_detail(
|
|
eventId: str,
|
|
db: AsyncSession = Depends(get_db)
|
|
):
|
|
back = await event.get_event_detail(db=db, eventId=eventId)
|
|
return back
|
|
|
|
|
|
|
|
@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) |