diff options
Diffstat (limited to 'backend/models')
-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) |