diff options
author | 2020-12-12 14:32:13 +0000 | |
---|---|---|
committer | 2020-12-12 14:32:13 +0000 | |
commit | 35626c80026931dc7306f06bcd5e7cdc70d4dddc (patch) | |
tree | a7649a765812096a21a87b8089f5977517c80a43 /backend/models | |
parent | Merge pull request #16 from python-discord/add-form-response-schema (diff) | |
parent | Make JSON errors more JS friendly and add response codes (diff) |
Merge pull request #17 from python-discord/ks123/response-model-endpoint
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 |