aboutsummaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/models/form_response.py15
-rw-r--r--backend/routes/forms/submit.py2
2 files changed, 16 insertions, 1 deletions
diff --git a/backend/models/form_response.py b/backend/models/form_response.py
index f3296cd..0da7b15 100644
--- a/backend/models/form_response.py
+++ b/backend/models/form_response.py
@@ -1,6 +1,7 @@
+import datetime
import typing as t
-from pydantic import BaseModel, Field
+from pydantic import BaseModel, Field, validator
from .antispam import AntiSpam
from .discord_user import DiscordUser
@@ -14,6 +15,18 @@ class FormResponse(BaseModel):
antispam: t.Optional[AntiSpam]
response: dict[str, t.Any]
form_id: str
+ timestamp: str
+
+ @validator("timestamp", pre=True)
+ def set_timestamp(cls, iso_string: t.Optional[str]) -> t.Optional[str]:
+ if iso_string is None:
+ return datetime.datetime.now(tz=datetime.timezone.utc).isoformat()
+
+ elif not isinstance(iso_string, str):
+ raise ValueError("Submission timestamp must be a string.")
+
+ # Convert to datetime and back to ensure string is valid
+ return datetime.datetime.fromisoformat(iso_string).isoformat()
class Config:
allow_population_by_field_name = True
diff --git a/backend/routes/forms/submit.py b/backend/routes/forms/submit.py
index 3ecbda0..48ae4f6 100644
--- a/backend/routes/forms/submit.py
+++ b/backend/routes/forms/submit.py
@@ -34,6 +34,8 @@ class SubmitForm(Route):
async def post(self, request: Request) -> JSONResponse:
data = await request.json()
+ data["timestamp"] = None
+
if form := await request.state.db.forms.find_one(
{"_id": request.path_params["form_id"], "features": "OPEN"}
):