diff --git a/database/form.py b/database/form.py new file mode 100644 index 0000000..81fe25b --- /dev/null +++ b/database/form.py @@ -0,0 +1,13 @@ +from sqlalchemy import JSON +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from database import Base, User + + +class Form(Base): + __tablename__ = "forms" + + id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] + owner: Mapped[User] = relationship(User, cascade="all, delete") + data: Mapped[dict] = mapped_column(JSON) diff --git a/database/user.py b/database/user.py index 62a7914..3fabae2 100644 --- a/database/user.py +++ b/database/user.py @@ -5,6 +5,7 @@ from database import Base class User(Base): __tablename__ = "users" + id: Mapped[int] = mapped_column(primary_key=True) username: Mapped[str] = mapped_column(unique=True) password: Mapped[str] diff --git a/models/form.py b/models/form.py new file mode 100644 index 0000000..9f207d9 --- /dev/null +++ b/models/form.py @@ -0,0 +1,21 @@ +from enum import Enum, auto + +from pydantic import Field + +from models import BaseModel + + +class QuestionType(Enum): + text = auto() + + +class BaseQuestion(BaseModel): + question_type: QuestionType + label: str = Field(min_length=1) + description: str | None = Field(None, min_length=1) + + +class TextQuestion(BaseQuestion): + question_type = QuestionType.text + min_length: int | None = None + max_length: int | None = None diff --git a/requirements.txt b/requirements.txt index 4a5088f..7f2629f 100644 Binary files a/requirements.txt and b/requirements.txt differ