초기 커밋
This commit is contained in:
73
app/api/v1/endpoints/analytics.py
Normal file
73
app/api/v1/endpoints/analytics.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
|
||||
from app.core.constants import Role
|
||||
from app.core.dependencies import require_role
|
||||
from app.schemas.analytics import (
|
||||
AnalyticsResultRead,
|
||||
ReportResponse,
|
||||
TelemetryAggregateResponse,
|
||||
)
|
||||
from app.services.analytics_service import AnalyticsService
|
||||
|
||||
router = APIRouter(prefix="/analytics", tags=["analytics"])
|
||||
|
||||
|
||||
@router.get("/telemetry/{device_id}", response_model=TelemetryAggregateResponse)
|
||||
async def get_telemetry_aggregate(
|
||||
device_id: str,
|
||||
start: datetime = Query(...),
|
||||
end: datetime = Query(...),
|
||||
interval: str = Query("1h"),
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
) -> TelemetryAggregateResponse:
|
||||
service = AnalyticsService()
|
||||
return await service.get_telemetry_aggregate(device_id, start, end, interval)
|
||||
|
||||
|
||||
@router.post("/reports/{device_id}", response_model=ReportResponse)
|
||||
async def generate_report(
|
||||
device_id: str,
|
||||
start: datetime = Query(...),
|
||||
end: datetime = Query(...),
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
) -> ReportResponse:
|
||||
service = AnalyticsService()
|
||||
return await service.generate_report(device_id, start, end)
|
||||
|
||||
|
||||
@router.get("/status/{device_id}")
|
||||
async def device_status_analysis(
|
||||
device_id: str,
|
||||
start: datetime = Query(...),
|
||||
end: datetime = Query(...),
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
) -> dict:
|
||||
service = AnalyticsService()
|
||||
return await service.get_device_status_analysis(device_id, start, end)
|
||||
|
||||
|
||||
@router.get("/trends/{device_id}")
|
||||
async def trend_analysis(
|
||||
device_id: str,
|
||||
start: datetime = Query(...),
|
||||
end: datetime = Query(...),
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
) -> dict:
|
||||
service = AnalyticsService()
|
||||
return await service.get_trend_analysis(device_id, start, end)
|
||||
|
||||
|
||||
@router.get("/results", response_model=list[AnalyticsResultRead])
|
||||
async def list_analytics_results(
|
||||
analysis_type: str = Query(...),
|
||||
device_id: str | None = Query(None),
|
||||
skip: int = Query(0, ge=0),
|
||||
limit: int = Query(20, ge=1, le=100),
|
||||
_: dict = Depends(require_role(*Role.MANAGEMENT_ROLES)),
|
||||
) -> list[AnalyticsResultRead]:
|
||||
service = AnalyticsService()
|
||||
return await service.list_results(analysis_type, device_id, skip, limit)
|
||||
Reference in New Issue
Block a user