Files
flowsint/flowsint-api/app/api/routes/scan.py

60 lines
1.8 KiB
Python

from typing import List
from uuid import UUID
from fastapi import APIRouter, Depends, HTTPException, status
from flowsint_core.core.models import Profile
from flowsint_core.core.postgre_db import get_db
from flowsint_core.core.services import (
NotFoundError,
PermissionDeniedError,
create_scan_service,
)
from sqlalchemy.orm import Session
from app.api.deps import get_current_user
from app.api.schemas.scan import ScanRead
router = APIRouter()
@router.get("/sketch/{id}", response_model=List[ScanRead])
def get_scans(
id: UUID,
db: Session = Depends(get_db),
current_user: Profile = Depends(get_current_user),
):
"""Get all scans accessible to the current user, linked to a sketch."""
service = create_scan_service(db)
return service.get_accessible_scans_by_sketch_id(current_user.id, id)
@router.get("/{id}", response_model=ScanRead)
def get_scan_by_id(
id: UUID,
db: Session = Depends(get_db),
current_user: Profile = Depends(get_current_user),
):
service = create_scan_service(db)
try:
return service.get_by_id(id, current_user.id)
except NotFoundError:
raise HTTPException(status_code=404, detail="Scan not found")
except PermissionDeniedError:
raise HTTPException(status_code=403, detail="Forbidden")
@router.delete("/{id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_scan_by_id(
id: UUID,
db: Session = Depends(get_db),
current_user: Profile = Depends(get_current_user),
):
service = create_scan_service(db)
try:
service.delete(id, current_user.id)
return None
except NotFoundError:
raise HTTPException(status_code=404, detail="Scan not found")
except PermissionDeniedError:
raise HTTPException(status_code=403, detail="Forbidden")