修改查询判断条件和更新数据的数据条件

This commit is contained in:
haotian 2025-05-26 17:00:31 +08:00
parent 0aef0ce193
commit a94d0c5191
3 changed files with 70 additions and 35 deletions

View File

@ -3,7 +3,7 @@ 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
from app.schemas.event import EventList, EventDetail, EventUpdate, EventQuery, BackStageEvent, BackStageEventDto, BackStageEventDetail, EditTemperatureDto
from app.util.httpResponse import BaseResponse
import datetime
@ -73,23 +73,23 @@ async def get_event_detail(
# 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.put("/events/{event_id}", response_model=BaseResponse)
async def update_event(
event_id: str,
event_in: EditTemperatureDto,
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 BaseResponse(code=404, msg="事件不存在")
return BaseResponse(code=200, msg="success")
@router.delete("/events/{event_id}", response_model=BaseResponse[EventDetail])
async def delete_event(

View File

@ -1,10 +1,12 @@
from typing import List, Optional, Dict, Any
from sqlalchemy import select, and_, or_
from sqlalchemy import select, and_, or_, update
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload
from app.crud.base import CRUDBase
from app.models.models import Event, Image, Temperature
from app.schemas.event import EventUpdate, EventQuery, BackStageEvent, BackStageEventDto, BackStageEventDetail
from app.schemas.event import EventUpdate, EventQuery, BackStageEvent, BackStageEventDto, BackStageEventDetail, EditTemperatureDto
from pydantic import VERSION as PYDANTIC_VERSION
class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]):
async def get_by_id(self, db: AsyncSession, *, event_id: str) -> Optional[Event]:
@ -48,13 +50,13 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]):
conditions = []
if query.eventId is not None:
if query.eventId is not None and len(query.eventId) > 0:
conditions.append(Event.eventId==query.eventId)
if query.number is not None:
if query.number is not None and len(query.number) > 0:
conditions.append(Event.number == query.number)
if query.name is not None:
if query.name is not None and len(query.name) > 0:
conditions.append(Event.name == query.name)
if query.status is not None:
if query.status is not None and len(query.status) > 0:
conditions.append(Temperature.status == query.status)
if query.start_time is not None:
conditions.append(Temperature.createTime >= query.start_time)
@ -126,21 +128,49 @@ class CRUDEvent(CRUDBase[Event, EventUpdate, EventUpdate]):
db: AsyncSession,
*,
event_id: str,
obj_in: EventUpdate
obj_in: EditTemperatureDto
) -> Optional[Event]:
"""更新事件信息"""
event = await self.get_by_id(db, event_id=event_id)
if not event:
return None
dict_values = dict()
if PYDANTIC_VERSION.startswith("2."):
field_names = list(EditTemperatureDto.model_fields.keys())
else:
field_names = list(EditTemperatureDto.__fields__.keys())
for key in field_names:
update_data = obj_in.model_dump()
for field, value in update_data.items():
setattr(event, field, value)
value = getattr(obj_in, key)
if value is not None:
dict_values[key] = value
# if obj_in.status is not None:
try:
update_stmt = (
update(Temperature).where(Temperature.eventId == event_id).values(**dict_values)
)
# db.add(event)
await db.commit()
await db.refresh(event)
return event
await db.execute(update_stmt)
await db.commit()
return True
except:
return False
# event = await self.get_by_id(db, event_id=event_id)
# if not event:
# return None
# update_data = obj_in.model_dump()
# for field, value in update_data.items():
# setattr(event, field, value)
# # db.add(event)
# await db.commit()
# await db.refresh(event)
# return event
async def delete_event(
self,

View File

@ -127,6 +127,11 @@ class BackStageEventDto(BaseModel):
skip: int = 0
limit: int = 100
class EditTemperatureDto(BaseModel):
status: Optional[str] = None
temperature: Optional[str] = None
# 后台查看事件详情
class BackStageEventDetail(BaseModel):
eventId:str = None