35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.db.session import get_db
|
|
from app.schemas import Envelope, ItemList
|
|
from app.schemas.temporal import (
|
|
TemporalComparisonRequest,
|
|
TemporalComparisonResponse,
|
|
TemporalSeriesRead,
|
|
)
|
|
from app.services.temporal_analysis_service import TemporalAnalysisService
|
|
from app.utils.response import envelope
|
|
|
|
|
|
router = APIRouter(prefix="/projects/{project_id}/temporal", tags=["temporal"])
|
|
|
|
|
|
@router.get("/series", response_model=Envelope[ItemList[TemporalSeriesRead]])
|
|
def list_temporal_series(project_id: UUID, db: Session = Depends(get_db)):
|
|
series = TemporalAnalysisService.list_series(db, project_id)
|
|
return envelope({"items": [item.model_dump() for item in series], "total": len(series)})
|
|
|
|
|
|
@router.post("/compare", response_model=Envelope[TemporalComparisonResponse])
|
|
def compare_temporal_snapshots(
|
|
project_id: UUID,
|
|
payload: TemporalComparisonRequest,
|
|
db: Session = Depends(get_db),
|
|
):
|
|
return envelope(TemporalAnalysisService.compare(db, project_id=project_id, payload=payload).model_dump())
|