investigation.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from .base import ORMBase
  2. from pydantic import UUID4, BaseModel
  3. from typing import Optional
  4. from datetime import datetime
  5. from .sketch import SketchRead
  6. from .analysis import AnalysisRead
  7. from .profile import ProfileRead
  8. class InvestigationCreate(BaseModel):
  9. name: str
  10. description: str
  11. owner_id: Optional[UUID4] = None
  12. status: Optional[str] = "active"
  13. class InvestigationRead(ORMBase):
  14. id: UUID4
  15. created_at: datetime
  16. name: str
  17. description: str
  18. owner_id: Optional[UUID4]
  19. last_updated_at: datetime
  20. status: str
  21. owner: Optional[ProfileRead] = None
  22. sketches: list[SketchRead] = []
  23. analyses: list[AnalysisRead] = []
  24. current_user_role: Optional[str] = None
  25. class InvestigationUpdate(BaseModel):
  26. name: str
  27. description: Optional[str] = None
  28. last_updated_at: datetime
  29. status: str
  30. # ── Collaborator schemas ─────────────────────────────────────────────
  31. class CollaboratorAdd(BaseModel):
  32. email: str
  33. role: str # "admin", "editor", "viewer"
  34. class CollaboratorUpdate(BaseModel):
  35. role: str # "admin", "editor", "viewer"
  36. class CollaboratorRead(ORMBase):
  37. id: UUID4
  38. user_id: UUID4
  39. roles: list[str] = []
  40. user: Optional[ProfileRead] = None