diff options
-rw-r--r-- | backend/models/discord_user.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/backend/models/discord_user.py b/backend/models/discord_user.py new file mode 100644 index 0000000..99d6248 --- /dev/null +++ b/backend/models/discord_user.py @@ -0,0 +1,33 @@ +import typing as t + +from pydantic import BaseModel, root_validator + + +class DiscordUser(BaseModel): + """Schema model of Discord user for form response.""" + + # Discord default fields + id: int # This is actually snowflake, but we simplify it here + username: str + discriminator: str + avatar: t.Optional[str] + bot: t.Optional[bool] + system: t.Optional[bool] + locale: t.Optional[str] + verified: t.Optional[bool] + email: t.Optional[str] + flags: t.Optional[int] + premium_type: t.Optional[int] + public_flags: t.Optional[int] + + # Custom fields + admin: bool + + @root_validator + def validate_data(cls, values: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: + """Validates email data when email collection is required.""" + if values.get("require_email", False) is True: + if values.get("email") is None or values.get("verified") is None: + raise ValueError("Email information about user is required.") + + return values |