aboutsummaryrefslogtreecommitdiffstats
path: root/backend/models
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2020-12-12 14:33:37 +0000
committerGravatar GitHub <[email protected]>2020-12-12 14:33:37 +0000
commit558b99282ddf742104c62519817954791beb605a (patch)
treecfa3b6e6a57de4278027e254385ddc759496b2b9 /backend/models
parentAdd name and description fields to Form model (diff)
parentMerge pull request #17 from python-discord/ks123/response-model-endpoint (diff)
Merge branch 'main' into ks123/form-name-description
Diffstat (limited to 'backend/models')
-rw-r--r--backend/models/__init__.py5
-rw-r--r--backend/models/antispam.py10
-rw-r--r--backend/models/discord_user.py24
-rw-r--r--backend/models/form_response.py19
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