from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from datetime import datetime from ..models import Base # Ensure models are loaded if needed from ..services.postgresql_manager import PostgreSQLManager from ..utils.config import config from ..services.discovery import SegmentDiscoveryService from ..schemas.discovery import DiscoveryFilter, DiscoveryResult, CandidateSegmentSchema, SingleDiscoveryRequest router = APIRouter() def get_db_session(): db_manager = PostgreSQLManager(config.DATABASE_URL) with db_manager.get_db_session() as session: yield session @router.post("/segments", response_model=DiscoveryResult) def discover_segments( filter: DiscoveryFilter, db: Session = Depends(get_db_session) ): service = SegmentDiscoveryService(db) # Defaults start = filter.start_date or datetime.now().replace(year=datetime.now().year - 1) # Default 1 year? candidates, debug_paths = service.discover_segments( activity_type=filter.activity_type, start_date=start, end_date=filter.end_date ) # Convert to schema results = [] for c in candidates: results.append(CandidateSegmentSchema( points=c.points, frequency=c.frequency, distance=c.distance, activity_ids=c.activity_ids )) return DiscoveryResult( candidates=results, generated_at=datetime.now(), activity_count=len(debug_paths), debug_paths=debug_paths ) @router.post("/single", response_model=DiscoveryResult) def discover_single_activity( request: SingleDiscoveryRequest, db: Session = Depends(get_db_session) ): service = SegmentDiscoveryService(db) candidates = service.analyze_single_activity(request.activity_id) # Convert to schema results = [] for c in candidates: results.append(CandidateSegmentSchema( points=c.points, frequency=c.frequency, distance=c.distance, activity_ids=c.activity_ids )) return DiscoveryResult( candidates=results, generated_at=datetime.now(), activity_count=1, debug_paths=None )