diff options
| author | 2024-07-21 13:44:36 +0100 | |
|---|---|---|
| committer | 2024-07-22 21:39:19 +0100 | |
| commit | 0c79a18a5661623f13e83c7636953fc49bc95c51 (patch) | |
| tree | 5ebb2fdb402f73d4c2f4f723a3a7ff391f7529a2 /backend | |
| parent | Add models & migrations for form questions (diff) | |
Add form response model & migrationssqla-migration
Diffstat (limited to '')
| -rw-r--r-- | backend/models/orm/__init__.py | 6 | ||||
| -rw-r--r-- | backend/models/orm/form_responses.py | 28 | ||||
| -rw-r--r-- | backend/models/orm/forms.py | 6 | 
3 files changed, 37 insertions, 3 deletions
| diff --git a/backend/models/orm/__init__.py b/backend/models/orm/__init__.py index 4db39ae..4b4e99b 100644 --- a/backend/models/orm/__init__.py +++ b/backend/models/orm/__init__.py @@ -2,8 +2,7 @@  from .admins import Admin  from .base import Base -from .forms import Form, FormEditor, FormFeatures -from .questions import ( +from .form_questions import (      FormCheckboxQuestion,      FormCodeQuestion,      FormCodeQuestionTest, @@ -16,6 +15,8 @@ from .questions import (      FormTimezoneQuestion,      FormVoteQuestion,  ) +from .form_responses import FormResponse +from .forms import Form, FormEditor, FormFeatures  __all__ = (      "Admin", @@ -29,6 +30,7 @@ __all__ = (      "FormQuestion",      "FormRadioQuestion",      "FormRangeQuestion", +    "FormResponse",      "FormSectionQuestion",      "FormSelectQuestion",      "FormTextQuestion", diff --git a/backend/models/orm/form_responses.py b/backend/models/orm/form_responses.py new file mode 100644 index 0000000..d9876b9 --- /dev/null +++ b/backend/models/orm/form_responses.py @@ -0,0 +1,28 @@ +"""A submitted response to a form.""" + +from datetime import datetime + +from sqlalchemy import ForeignKey +from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy.types import BigInteger, DateTime, Text + +from .base import Base + + +class FormResponse(Base): +    """A submitted response to a form.""" + +    __tablename__ = "form_responses" + +    response_id: Mapped[int] = mapped_column(primary_key=True) +    form_id: Mapped[int] = mapped_column(ForeignKey("forms.form_id")) +    submitted_at: Mapped[datetime] = mapped_column(DateTime(timezone=True)) + +    user_id: Mapped[int] = mapped_column(BigInteger) +    username: Mapped[str] = mapped_column(Text) +    user_email: Mapped[str] = mapped_column(Text, nullable=True) +    user_is_admin: Mapped[bool] + +    antispam_ip_hash: Mapped[str] = mapped_column(Text, nullable=True) +    antispam_user_agent_hash: Mapped[str] = mapped_column(Text, nullable=True) +    antispam_captcha_pass: Mapped[bool] = mapped_column(nullable=True) diff --git a/backend/models/orm/forms.py b/backend/models/orm/forms.py index 71119c7..0c1a4e3 100644 --- a/backend/models/orm/forms.py +++ b/backend/models/orm/forms.py @@ -12,7 +12,7 @@ from backend.constants import FormFeatures  from .base import Base  if TYPE_CHECKING: -    from . import FormQuestion +    from . import FormQuestion, FormResponse  class Form(Base): @@ -31,6 +31,10 @@ class Form(Base):          cascade="all, delete",          passive_deletes=True,      ) +    form_responses: Mapped[list["FormResponse"]] = relationship( +        cascade="all, delete", +        passive_deletes=True, +    )      webhook_url: Mapped[str | None] = mapped_column(Text, nullable=True)      webhook_message: Mapped[str | None] = mapped_column(Text, nullable=True) | 
