analysis.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from uuid import UUID
  2. from fastapi import APIRouter, HTTPException, Depends, status
  3. from typing import List
  4. from sqlalchemy.orm import Session
  5. from flowsint_core.core.postgre_db import get_db
  6. from flowsint_core.core.models import Profile
  7. from flowsint_core.core.services import (
  8. create_analysis_service,
  9. NotFoundError,
  10. PermissionDeniedError,
  11. )
  12. from app.api.deps import get_current_user
  13. from app.api.schemas.analysis import AnalysisRead, AnalysisCreate, AnalysisUpdate
  14. router = APIRouter()
  15. @router.get("", response_model=List[AnalysisRead])
  16. def get_analyses(
  17. db: Session = Depends(get_db), current_user: Profile = Depends(get_current_user)
  18. ):
  19. """Get all analyses accessible to the current user."""
  20. service = create_analysis_service(db)
  21. return service.get_accessible_analyses(current_user.id)
  22. @router.post(
  23. "/create", response_model=AnalysisRead, status_code=status.HTTP_201_CREATED
  24. )
  25. def create_analysis(
  26. payload: AnalysisCreate,
  27. db: Session = Depends(get_db),
  28. current_user: Profile = Depends(get_current_user),
  29. ):
  30. service = create_analysis_service(db)
  31. try:
  32. return service.create(
  33. title=payload.title,
  34. description=payload.description,
  35. content=payload.content,
  36. investigation_id=payload.investigation_id,
  37. owner_id=current_user.id,
  38. )
  39. except PermissionDeniedError:
  40. raise HTTPException(status_code=403, detail="Forbidden")
  41. @router.get("/{analysis_id}", response_model=AnalysisRead)
  42. def get_analysis_by_id(
  43. analysis_id: UUID,
  44. db: Session = Depends(get_db),
  45. current_user: Profile = Depends(get_current_user),
  46. ):
  47. service = create_analysis_service(db)
  48. try:
  49. return service.get_by_id(analysis_id, current_user.id)
  50. except NotFoundError:
  51. raise HTTPException(status_code=404, detail="Analysis not found")
  52. except PermissionDeniedError:
  53. raise HTTPException(status_code=403, detail="Forbidden")
  54. @router.get("/investigation/{investigation_id}", response_model=List[AnalysisRead])
  55. def get_analyses_by_investigation(
  56. investigation_id: UUID,
  57. db: Session = Depends(get_db),
  58. current_user: Profile = Depends(get_current_user),
  59. ):
  60. service = create_analysis_service(db)
  61. try:
  62. return service.get_by_investigation(investigation_id, current_user.id)
  63. except PermissionDeniedError:
  64. raise HTTPException(status_code=403, detail="Forbidden")
  65. @router.put("/{analysis_id}", response_model=AnalysisRead)
  66. def update_analysis(
  67. analysis_id: UUID,
  68. payload: AnalysisUpdate,
  69. db: Session = Depends(get_db),
  70. current_user: Profile = Depends(get_current_user),
  71. ):
  72. service = create_analysis_service(db)
  73. try:
  74. return service.update(
  75. analysis_id=analysis_id,
  76. user_id=current_user.id,
  77. title=payload.title,
  78. description=payload.description,
  79. content=payload.content,
  80. investigation_id=payload.investigation_id,
  81. )
  82. except NotFoundError:
  83. raise HTTPException(status_code=404, detail="Analysis not found")
  84. except PermissionDeniedError:
  85. raise HTTPException(status_code=403, detail="Forbidden")
  86. @router.delete("/{analysis_id}", status_code=status.HTTP_204_NO_CONTENT)
  87. def delete_analysis(
  88. analysis_id: UUID,
  89. db: Session = Depends(get_db),
  90. current_user: Profile = Depends(get_current_user),
  91. ):
  92. service = create_analysis_service(db)
  93. try:
  94. service.delete(analysis_id, current_user.id)
  95. return None
  96. except NotFoundError:
  97. raise HTTPException(status_code=404, detail="Analysis not found")
  98. except PermissionDeniedError:
  99. raise HTTPException(status_code=403, detail="Forbidden")