many updates
This commit is contained in:
83
FitnessSync/backend/src/api/discovery.py
Normal file
83
FitnessSync/backend/src/api/discovery.py
Normal file
@@ -0,0 +1,83 @@
|
||||
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
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user