44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
from fastapi import APIRouter, Query, Response
|
|
from pydantic import BaseModel
|
|
from typing import List, Optional, Dict, Any
|
|
|
|
router = APIRouter()
|
|
|
|
class ActivityResponse(BaseModel):
|
|
id: Optional[int] = None
|
|
garmin_activity_id: Optional[str] = None
|
|
activity_name: Optional[str] = None
|
|
activity_type: Optional[str] = None
|
|
start_time: Optional[str] = None
|
|
duration: Optional[int] = None
|
|
# file_path removed since we store in DB
|
|
file_type: Optional[str] = None
|
|
download_status: Optional[str] = None
|
|
downloaded_at: Optional[str] = None
|
|
|
|
@router.get("/activities/list", response_model=List[ActivityResponse])
|
|
async def list_activities(
|
|
limit: int = Query(50, ge=1, le=200),
|
|
offset: int = Query(0, ge=0)
|
|
):
|
|
# This would return metadata for all downloaded/available activities
|
|
# Implementation will connect with the services layer
|
|
return []
|
|
|
|
@router.get("/activities/query", response_model=List[ActivityResponse])
|
|
async def query_activities(
|
|
activity_type: Optional[str] = Query(None),
|
|
start_date: Optional[str] = Query(None),
|
|
end_date: Optional[str] = Query(None),
|
|
download_status: Optional[str] = Query(None)
|
|
):
|
|
# This would allow advanced filtering of activities
|
|
# Implementation will connect with the services layer
|
|
return []
|
|
|
|
@router.get("/activities/download/{activity_id}")
|
|
async def download_activity(activity_id: str):
|
|
# This would serve the stored activity file from the database
|
|
# Implementation will connect with the services layer
|
|
# It should return the file content with appropriate content-type
|
|
return Response(content=b"sample_content", media_type="application/octet-stream", headers={"Content-Disposition": f"attachment; filename=activity_{activity_id}.tcx"}) |