mirror of
https://github.com/reconurge/flowsint.git
synced 2026-08-03 12:16:23 -05:00
60 lines
1.8 KiB
Python
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")
|