diff options
| author | 2020-12-08 11:02:26 +0200 | |
|---|---|---|
| committer | 2020-12-08 11:02:26 +0200 | |
| commit | 5112df454e868175a898f1f15167becada26d55a (patch) | |
| tree | 6ec1e4032b480d83bbd7eecc37102e6526783550 /backend/models | |
| parent | Add AntiSpam and DiscordUser models to __init__.py (diff) | |
Create model for form response
Diffstat (limited to 'backend/models')
| -rw-r--r-- | backend/models/__init__.py | 3 | ||||
| -rw-r--r-- | backend/models/form_response.py | 36 | 
2 files changed, 38 insertions, 1 deletions
| diff --git a/backend/models/__init__.py b/backend/models/__init__.py index a85dc2c..98fa619 100644 --- a/backend/models/__init__.py +++ b/backend/models/__init__.py @@ -1,6 +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__ = ["AntiSpam", "DiscordUser", "Form", "Question"] +__all__ = ["AntiSpam", "DiscordUser", "Form", "FormResponse", "Question"] diff --git a/backend/models/form_response.py b/backend/models/form_response.py new file mode 100644 index 0000000..9fffdde --- /dev/null +++ b/backend/models/form_response.py @@ -0,0 +1,36 @@ +import typing as t + +from pydantic import BaseModel, Field, root_validator + +from backend.constants import FormFeatures +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 + +    @root_validator +    def validate_data(cls, values: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: +        """Validates is all required (based on flags) is provided.""" +        flags = values.get("flags", []) + +        if FormFeatures.DISABLE_ANTISPAM not in flags and values.get("antispam") is None:  # noqa +            raise ValueError("Antispam information required.") + +        if FormFeatures.REQUIRES_LOGIN in flags: +            if values.get("user") is None: +                raise ValueError("User information required.") + +            values["user"]["require_email"] = FormFeatures.COLLECT_EMAIL in flags + +        return values | 
