Skip to content

Commit 23c5295

Browse files
committed
add: single Sensor Statistics Update Endpoint
1 parent dc256f6 commit 23c5295

4 files changed

Lines changed: 43 additions & 6 deletions

File tree

app/api/v1/routes/campaigns/campaign_station_sensors.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from app.api.dependencies.auth import get_current_user
66
from app.api.dependencies.pytas import check_allocation_permission
7-
from app.api.v1.schemas.sensor import SensorItem, GetSensorResponse, ListSensorsResponsePagination, SensorStatistics, SensorCreateResponse, SensorUpdate, ForceUpdateSensorStatisticsResponse
7+
from app.api.v1.schemas.sensor import SensorItem, GetSensorResponse, ListSensorsResponsePagination, SensorStatistics, SensorCreateResponse, SensorUpdate, ForceUpdateSensorStatisticsResponse, UpdateSensorStatisticsResponse
88
from app.api.v1.schemas.user import User
99
from app.db.session import get_db
1010
from app.db.repositories.sensor_repository import SensorRepository, SortField
@@ -158,4 +158,25 @@ def force_update_sensor_statistics(
158158
measurement_repository=MeasurementRepository(db)
159159
)
160160

161-
return sensor_service.force_update_station_sensor_statistics(station_id)
161+
return sensor_service.force_update_station_sensor_statistics(station_id)
162+
163+
164+
@router.post("/sensors/{sensor_id}/statistics",
165+
response_model=UpdateSensorStatisticsResponse,
166+
description="Force update sensor statistics for a single sensor")
167+
def force_update_single_sensor_statistics(
168+
campaign_id: int,
169+
station_id: int,
170+
sensor_id: int,
171+
db: Session = Depends(get_db),
172+
current_user: User = Depends(get_current_user),
173+
) -> UpdateSensorStatisticsResponse:
174+
if not check_allocation_permission(current_user, campaign_id):
175+
raise HTTPException(status_code=404, detail="Allocation is incorrect")
176+
177+
sensor_service = SensorService(
178+
sensor_repository=SensorRepository(db),
179+
measurement_repository=MeasurementRepository(db)
180+
)
181+
182+
return sensor_service.force_update_single_sensor_statistics(sensor_id)

app/api/v1/schemas/sensor.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,9 @@ class SensorUpdate(BaseModel):
7676

7777
class ForceUpdateSensorStatisticsResponse(BaseModel):
7878
updated_sensor_ids: List[int]
79-
total_updated: int
79+
total_updated: int
80+
81+
82+
class UpdateSensorStatisticsResponse(BaseModel):
83+
sensor_id: int
84+
updated: bool

app/services/sensor_service.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
SensorStatistics,
1010
SensorItem,
1111
SensorUpdate,
12-
ForceUpdateSensorStatisticsResponse
12+
ForceUpdateSensorStatisticsResponse,
13+
UpdateSensorStatisticsResponse
1314
)
1415
from app.db.repositories.sensor_repository import SensorRepository, SortField
1516
from app.db.repositories.measurement_repository import MeasurementRepository
@@ -200,4 +201,14 @@ def force_update_station_sensor_statistics(self, station_id: int) -> ForceUpdate
200201
return ForceUpdateSensorStatisticsResponse(
201202
updated_sensor_ids=updated_sensor_ids,
202203
total_updated=len(updated_sensor_ids)
203-
)
204+
)
205+
206+
def force_update_single_sensor_statistics(self, sensor_id: int) -> UpdateSensorStatisticsResponse:
207+
"""Force update statistics for a single sensor."""
208+
try:
209+
self.sensor_repository.delete_sensor_statistics(sensor_id)
210+
self.sensor_repository.refresh_sensor_statistics(sensor_id)
211+
return UpdateSensorStatisticsResponse(sensor_id=sensor_id, updated=True)
212+
except Exception as e:
213+
logging.warning("Failed to update statistics for sensor ID %s: %s", sensor_id, str(e))
214+
return UpdateSensorStatisticsResponse(sensor_id=sensor_id, updated=False)

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ services:
1010
volumes:
1111
- .:/app
1212
ports:
13-
- 8008:8000
13+
- 8000:8000
1414
environment:
1515
- DATABASE_URL=postgresql://fastapi_traefik:fastapi_traefik@db:5432/fastapi_traefik
1616
depends_on:

0 commit comments

Comments
 (0)