diff options
Diffstat (limited to 'backend/models')
| -rw-r--r-- | backend/models/__init__.py | 5 | ||||
| -rw-r--r-- | backend/models/antispam.py | 10 | ||||
| -rw-r--r-- | backend/models/discord_user.py | 24 | ||||
| -rw-r--r-- | backend/models/form_response.py | 19 | 
4 files changed, 57 insertions, 1 deletions
| diff --git a/backend/models/__init__.py b/backend/models/__init__.py index 80abf6f..98fa619 100644 --- a/backend/models/__init__.py +++ b/backend/models/__init__.py @@ -1,4 +1,7 @@ +from .antispam import AntiSpam +from .discord_user import DiscordUser  from .form import Form +from .form_response import FormResponse  from .question import Question -__all__ = ["Form", "Question"] +__all__ = ["AntiSpam", "DiscordUser", "Form", "FormResponse", "Question"] diff --git a/backend/models/antispam.py b/backend/models/antispam.py new file mode 100644 index 0000000..b16f686 --- /dev/null +++ b/backend/models/antispam.py @@ -0,0 +1,10 @@ +from pydantic import BaseModel + + +class AntiSpam(BaseModel): +    """Schema model for form response antispam field.""" + +    ip_hash: str +    user_agent_hash: str +    captcha_pass: bool +    dns_blacklisted: bool diff --git a/backend/models/discord_user.py b/backend/models/discord_user.py new file mode 100644 index 0000000..e835176 --- /dev/null +++ b/backend/models/discord_user.py @@ -0,0 +1,24 @@ +import typing as t + +from pydantic import BaseModel + + +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 diff --git a/backend/models/form_response.py b/backend/models/form_response.py new file mode 100644 index 0000000..bea070f --- /dev/null +++ b/backend/models/form_response.py @@ -0,0 +1,19 @@ +import typing as t + +from pydantic import BaseModel, Field + +from .antispam import AntiSpam +from .discord_user import DiscordUser + + +class FormResponse(BaseModel): +    """Schema model for form response.""" + +    id: str = Field(alias="_id") +    user: t.Optional[DiscordUser] +    antispam: t.Optional[AntiSpam] +    response: t.Dict[str, t.Any] +    form_id: str + +    class Config: +        allow_population_by_field_name = True | 
