group.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. """Pydantic schemas for Group CRUD operations."""
  2. from datetime import datetime
  3. from pydantic import BaseModel
  4. class GroupBrief(BaseModel):
  5. """Brief group info for embedding in other responses."""
  6. id: int
  7. name: str
  8. class Config:
  9. from_attributes = True
  10. class GroupCreate(BaseModel):
  11. """Schema for creating a new group."""
  12. name: str
  13. description: str | None = None
  14. permissions: list[str] = []
  15. class GroupUpdate(BaseModel):
  16. """Schema for updating a group."""
  17. name: str | None = None
  18. description: str | None = None
  19. permissions: list[str] | None = None
  20. class GroupResponse(BaseModel):
  21. """Schema for group response."""
  22. id: int
  23. name: str
  24. description: str | None
  25. permissions: list[str]
  26. is_system: bool
  27. user_count: int = 0
  28. created_at: datetime
  29. updated_at: datetime
  30. class Config:
  31. from_attributes = True
  32. class GroupDetailResponse(GroupResponse):
  33. """Schema for detailed group response including users."""
  34. users: list["UserBrief"] = []
  35. class UserBrief(BaseModel):
  36. """Brief user info for embedding in group response."""
  37. id: int
  38. username: str
  39. is_active: bool
  40. class Config:
  41. from_attributes = True
  42. class PermissionInfo(BaseModel):
  43. """Schema for permission information."""
  44. value: str
  45. label: str
  46. class PermissionCategory(BaseModel):
  47. """Schema for a category of permissions."""
  48. name: str
  49. permissions: list[PermissionInfo]
  50. class PermissionsListResponse(BaseModel):
  51. """Schema for listing all permissions by category."""
  52. categories: list[PermissionCategory]
  53. all_permissions: list[str]
  54. # Update forward references
  55. GroupDetailResponse.model_rebuild()