sumaq/backend/app/api/v1/endpoints/activities.py

88 lines
2.8 KiB
Python

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)