schema.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. from datetime import datetime
  2. from typing import Literal
  3. from ninja import Field, ModelSchema
  4. from pydantic import EmailStr
  5. from apps.users.schema import UserSchema
  6. from glitchtip.schema import CamelSchema
  7. from .models import (
  8. Organization,
  9. OrganizationUser,
  10. )
  11. class OrganizationInSchema(CamelSchema, ModelSchema):
  12. class Meta:
  13. model = Organization
  14. fields = [
  15. "name",
  16. ]
  17. class OrganizationSchema(OrganizationInSchema, ModelSchema):
  18. date_created: datetime = Field(validation_alias="created")
  19. status: dict[str, str] = {"id": "active", "name": "active"}
  20. avatar: dict[str, str | None] = {"avatarType": "", "avatarUuid": None}
  21. is_early_adopter: bool = False
  22. require2fa: bool = False
  23. class Meta(OrganizationInSchema.Meta):
  24. fields = [
  25. "id",
  26. "name",
  27. "slug",
  28. "is_accepting_events",
  29. "event_throttle_rate",
  30. ]
  31. OrgRole = Literal["member", "admin", "manager", "owner"]
  32. class TeamRole(CamelSchema):
  33. team_slug: str
  34. role: str = ""
  35. """Does nothing at this time"""
  36. class OrganizationUserUpdateSchema(CamelSchema):
  37. org_role: OrgRole
  38. team_roles: list[TeamRole] = Field(default_factory=list)
  39. class OrganizationUserIn(OrganizationUserUpdateSchema):
  40. email: EmailStr
  41. send_invite: bool = True
  42. reinvite: bool = True
  43. class OrganizationUserSchema(CamelSchema, ModelSchema):
  44. id: str
  45. role: str = Field(validation_alias="get_role")
  46. role_name: str = Field(validation_alias="get_role_display")
  47. date_created: datetime = Field(validation_alias="created")
  48. email: str = Field(validation_alias="get_email")
  49. user: UserSchema | None = None
  50. pending: bool
  51. class Meta:
  52. model = OrganizationUser
  53. fields = ["id"]
  54. class Config(CamelSchema.Config):
  55. coerce_numbers_to_str = True
  56. class OrganizationUserDetailSchema(OrganizationUserSchema):
  57. teams: list[str]
  58. isOwner: bool
  59. @staticmethod
  60. def resolve_teams(obj):
  61. return [team.slug for team in obj.teams.all()]
  62. @staticmethod
  63. def resolve_isOwner(obj):
  64. if owner := obj.organization.owner:
  65. return owner.organization_user_id == obj.id
  66. return False
  67. class AcceptInviteIn(CamelSchema):
  68. accept_invite: bool
  69. class OrganizationUserOrganizationSchema(OrganizationUserSchema):
  70. """Organization User Serializer with Organization info"""
  71. organization: OrganizationSchema
  72. class AcceptInviteSchema(AcceptInviteIn):
  73. org_user: OrganizationUserOrganizationSchema