| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- from uuid import UUID
- from fastapi import APIRouter, HTTPException, Depends, status
- from typing import List
- from sqlalchemy.orm import Session
- from flowsint_core.core.postgre_db import get_db
- from flowsint_core.core.models import Profile
- from flowsint_core.core.services import (
- create_analysis_service,
- NotFoundError,
- PermissionDeniedError,
- )
- from app.api.deps import get_current_user
- from app.api.schemas.analysis import AnalysisRead, AnalysisCreate, AnalysisUpdate
- router = APIRouter()
- @router.get("", response_model=List[AnalysisRead])
- def get_analyses(
- db: Session = Depends(get_db), current_user: Profile = Depends(get_current_user)
- ):
- """Get all analyses accessible to the current user."""
- service = create_analysis_service(db)
- return service.get_accessible_analyses(current_user.id)
- @router.post(
- "/create", response_model=AnalysisRead, status_code=status.HTTP_201_CREATED
- )
- def create_analysis(
- payload: AnalysisCreate,
- db: Session = Depends(get_db),
- current_user: Profile = Depends(get_current_user),
- ):
- service = create_analysis_service(db)
- try:
- return service.create(
- title=payload.title,
- description=payload.description,
- content=payload.content,
- investigation_id=payload.investigation_id,
- owner_id=current_user.id,
- )
- except PermissionDeniedError:
- raise HTTPException(status_code=403, detail="Forbidden")
- @router.get("/{analysis_id}", response_model=AnalysisRead)
- def get_analysis_by_id(
- analysis_id: UUID,
- db: Session = Depends(get_db),
- current_user: Profile = Depends(get_current_user),
- ):
- service = create_analysis_service(db)
- try:
- return service.get_by_id(analysis_id, current_user.id)
- except NotFoundError:
- raise HTTPException(status_code=404, detail="Analysis not found")
- except PermissionDeniedError:
- raise HTTPException(status_code=403, detail="Forbidden")
- @router.get("/investigation/{investigation_id}", response_model=List[AnalysisRead])
- def get_analyses_by_investigation(
- investigation_id: UUID,
- db: Session = Depends(get_db),
- current_user: Profile = Depends(get_current_user),
- ):
- service = create_analysis_service(db)
- try:
- return service.get_by_investigation(investigation_id, current_user.id)
- except PermissionDeniedError:
- raise HTTPException(status_code=403, detail="Forbidden")
- @router.put("/{analysis_id}", response_model=AnalysisRead)
- def update_analysis(
- analysis_id: UUID,
- payload: AnalysisUpdate,
- db: Session = Depends(get_db),
- current_user: Profile = Depends(get_current_user),
- ):
- service = create_analysis_service(db)
- try:
- return service.update(
- analysis_id=analysis_id,
- user_id=current_user.id,
- title=payload.title,
- description=payload.description,
- content=payload.content,
- investigation_id=payload.investigation_id,
- )
- except NotFoundError:
- raise HTTPException(status_code=404, detail="Analysis not found")
- except PermissionDeniedError:
- raise HTTPException(status_code=403, detail="Forbidden")
- @router.delete("/{analysis_id}", status_code=status.HTTP_204_NO_CONTENT)
- def delete_analysis(
- analysis_id: UUID,
- db: Session = Depends(get_db),
- current_user: Profile = Depends(get_current_user),
- ):
- service = create_analysis_service(db)
- try:
- service.delete(analysis_id, current_user.id)
- return None
- except NotFoundError:
- raise HTTPException(status_code=404, detail="Analysis not found")
- except PermissionDeniedError:
- raise HTTPException(status_code=403, detail="Forbidden")
|