feat: Update humidity, pressure, and temperature endpoints to support search with date range and limit

This commit is contained in:
2026-04-12 21:52:47 +08:00
parent f23d222b5b
commit 375ca1bb2b
3 changed files with 54 additions and 21 deletions
+18 -7
View File
@@ -1,4 +1,6 @@
from fastapi import APIRouter, Depends, status
from datetime import datetime
from fastapi import APIRouter, Depends, Query, status
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
@@ -27,15 +29,24 @@ async def create_new_humidity(
@router.get(
"/all",
"/search",
response_model=list[HumidityResponse],
status_code=status.HTTP_200_OK,
description="Get humidity of the city.",
description="Search humidity readings with optional date range and limit.",
)
async def get_humidity(
async def search_humidity(
session: AsyncSession = Depends(deps.get_session),
limit: int = Query(100, ge=1, le=1000),
start_date: datetime | None = Query(None, description="Filter readings from this date (ISO 8601)"),
end_date: datetime | None = Query(None, description="Filter readings until this date (ISO 8601)"),
) -> list[Humidity]:
humidity_list = await session.scalars(
select(Humidity).order_by(Humidity.create_time.desc())
)
query = select(Humidity)
if start_date:
query = query.where(Humidity.create_time >= start_date)
if end_date:
query = query.where(Humidity.create_time <= end_date)
query = query.order_by(Humidity.create_time.desc()).limit(limit)
humidity_list = await session.scalars(query)
return list(humidity_list.all())
+18 -7
View File
@@ -1,4 +1,6 @@
from fastapi import APIRouter, Depends, status
from datetime import datetime
from fastapi import APIRouter, Depends, Query, status
from sqlalchemy import ScalarResult, select
from sqlalchemy.ext.asyncio import AsyncSession
@@ -27,15 +29,24 @@ async def create_new_pressure(
@router.get(
"/all",
"/search",
response_model=list[PressureResponse],
status_code=status.HTTP_200_OK,
description="Get pressure of the city.",
description="Search pressure readings with optional date range and limit.",
)
async def get_pressure(
async def search_pressure(
session: AsyncSession = Depends(deps.get_session),
limit: int = Query(100, ge=1, le=1000),
start_date: datetime | None = Query(None, description="Filter readings from this date (ISO 8601)"),
end_date: datetime | None = Query(None, description="Filter readings until this date (ISO 8601)"),
) -> list[Pressure]:
pressure_list: ScalarResult[Pressure] = await session.scalars(
select(Pressure).order_by(Pressure.create_time.desc())
)
query = select(Pressure)
if start_date:
query = query.where(Pressure.create_time >= start_date)
if end_date:
query = query.where(Pressure.create_time <= end_date)
query = query.order_by(Pressure.create_time.desc()).limit(limit)
pressure_list: ScalarResult[Pressure] = await session.scalars(query)
return list(pressure_list.all())
+18 -7
View File
@@ -1,4 +1,6 @@
from fastapi import APIRouter, Depends, status
from datetime import datetime
from fastapi import APIRouter, Depends, Query, status
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
@@ -27,15 +29,24 @@ async def create_new_temperature(
@router.get(
"/all",
"/search",
response_model=list[TemperatureResponse],
status_code=status.HTTP_200_OK,
description="Get temperature of the city.",
description="Search temperature readings with optional date range and limit.",
)
async def get_temperature(
async def search_temperature(
session: AsyncSession = Depends(deps.get_session),
limit: int = Query(100, ge=1, le=1000),
start_date: datetime | None = Query(None, description="Filter readings from this date (ISO 8601)"),
end_date: datetime | None = Query(None, description="Filter readings until this date (ISO 8601)"),
) -> list[Temperature]:
temperature_list = await session.scalars(
select(Temperature).order_by(Temperature.create_time.desc())
)
query = select(Temperature)
if start_date:
query = query.where(Temperature.create_time >= start_date)
if end_date:
query = query.where(Temperature.create_time <= end_date)
query = query.order_by(Temperature.create_time.desc()).limit(limit)
temperature_list = await session.scalars(query)
return list(temperature_list.all())