scan.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from typing import List
  2. from uuid import UUID
  3. from fastapi import APIRouter, Depends, HTTPException, status
  4. from flowsint_core.core.models import Profile
  5. from flowsint_core.core.postgre_db import get_db
  6. from flowsint_core.core.services import (
  7. NotFoundError,
  8. PermissionDeniedError,
  9. create_scan_service,
  10. )
  11. from sqlalchemy.orm import Session
  12. from app.api.deps import get_current_user
  13. from app.api.schemas.scan import ScanRead
  14. router = APIRouter()
  15. @router.get("/sketch/{id}", response_model=List[ScanRead])
  16. def get_scans(
  17. id: UUID,
  18. db: Session = Depends(get_db),
  19. current_user: Profile = Depends(get_current_user),
  20. ):
  21. """Get all scans accessible to the current user, linked to a sketch."""
  22. service = create_scan_service(db)
  23. return service.get_accessible_scans_by_sketch_id(current_user.id, id)
  24. @router.get("/{id}", response_model=ScanRead)
  25. def get_scan_by_id(
  26. id: UUID,
  27. db: Session = Depends(get_db),
  28. current_user: Profile = Depends(get_current_user),
  29. ):
  30. service = create_scan_service(db)
  31. try:
  32. return service.get_by_id(id, current_user.id)
  33. except NotFoundError:
  34. raise HTTPException(status_code=404, detail="Scan not found")
  35. except PermissionDeniedError:
  36. raise HTTPException(status_code=403, detail="Forbidden")
  37. @router.delete("/{id}", status_code=status.HTTP_204_NO_CONTENT)
  38. def delete_scan_by_id(
  39. id: UUID,
  40. db: Session = Depends(get_db),
  41. current_user: Profile = Depends(get_current_user),
  42. ):
  43. service = create_scan_service(db)
  44. try:
  45. service.delete(id, current_user.id)
  46. return None
  47. except NotFoundError:
  48. raise HTTPException(status_code=404, detail="Scan not found")
  49. except PermissionDeniedError:
  50. raise HTTPException(status_code=403, detail="Forbidden")