from fastapi import APIRouter, Depends, UploadFile, File, BackgroundTasks from sqlalchemy.orm import Session from typing import List, Optional from app.db.database import get_db from app.models.user import User from app.api.deps import get_current_active_user from app.services.activities import ActivityService from app.schemas.activity import Activity, ActivityCreate, ActivityUpdate from app.schemas.evidence import Evidence, EvidenceUpdate router = APIRouter() def get_activity_service( db: Session = Depends(get_db), current_user: User = Depends(get_current_active_user), background_tasks: BackgroundTasks = None ) -> ActivityService: return ActivityService(db, current_user, background_tasks) @router.post("/", response_model=Activity) def create_activity( activity: ActivityCreate, service: ActivityService = Depends(get_activity_service) ): return service.create_activity(activity) @router.get("/", response_model=List[Activity]) def read_activities( project_id: Optional[int] = None, specialty_id: Optional[int] = None, skip: int = 0, limit: int = 100, service: ActivityService = Depends(get_activity_service) ): return service.get_activities(project_id, specialty_id, skip, limit) @router.get("/{activity_id}", response_model=Activity) def read_activity( activity_id: int, service: ActivityService = Depends(get_activity_service) ): return service.get_activity(activity_id) @router.put("/{activity_id}", response_model=Activity) def update_activity( activity_id: int, activity: ActivityUpdate, service: ActivityService = Depends(get_activity_service) ): return service.update_activity(activity_id, activity) @router.post("/{activity_id}/upload", response_model=Evidence) async def upload_evidence( activity_id: int, file: UploadFile = File(...), description: Optional[str] = None, captured_at: Optional[str] = None, service: ActivityService = Depends(get_activity_service) ): return service.upload_evidence( activity_id, file, description, captured_at ) @router.post("/evidence/{evidence_id}/retry-transcription", response_model=Evidence) async def retry_transcription( evidence_id: int, service: ActivityService = Depends(get_activity_service) ): return service.retry_transcription(evidence_id) @router.put("/evidence/{evidence_id}", response_model=Evidence) def update_evidence( evidence_id: int, evidence: EvidenceUpdate, service: ActivityService = Depends(get_activity_service) ): return service.update_evidence(evidence_id, evidence) @router.delete("/evidence/{evidence_id}") def delete_evidence( evidence_id: int, service: ActivityService = Depends(get_activity_service) ): return service.delete_evidence(evidence_id)