Files
FitTrack2/FitnessSync/backend/src/api/discovery.py
2026-01-11 06:06:43 -08:00

84 lines
2.2 KiB
Python

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
)