diff options
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/models/form_response.py | 15 | ||||
| -rw-r--r-- | backend/routes/forms/submit.py | 2 | 
2 files changed, 16 insertions, 1 deletions
| diff --git a/backend/models/form_response.py b/backend/models/form_response.py index 8bc69e4..933f5e4 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 150a343..dfa0de6 100644 --- a/backend/routes/forms/submit.py +++ b/backend/routes/forms/submit.py @@ -59,6 +59,8 @@ class SubmitForm(Route):          """Submit a response to the form."""          data = await request.json() +        data["timestamp"] = None +          if form := await request.state.db.forms.find_one(              {"_id": request.path_params["form_id"], "features": "OPEN"}          ): | 
