diff options
| author | 2024-08-16 19:04:08 +0100 | |
|---|---|---|
| committer | 2024-08-16 19:05:30 +0100 | |
| commit | cb25697c23c1b271e5b8efc78c2c3d5df7321dd3 (patch) | |
| tree | 799938ed51692e686c80cc6366c9f31ee775a72f | |
| parent | Add a database backend and migrations (diff) | |
Add users and products to the database
| -rw-r--r-- | thallium-backend/migrations/versions/1723831312-ac28edf8dd84_users_and_products.py | 51 | ||||
| -rw-r--r-- | thallium-backend/src/orm/products.py | 18 | ||||
| -rw-r--r-- | thallium-backend/src/orm/users.py | 12 |
3 files changed, 81 insertions, 0 deletions
diff --git a/thallium-backend/migrations/versions/1723831312-ac28edf8dd84_users_and_products.py b/thallium-backend/migrations/versions/1723831312-ac28edf8dd84_users_and_products.py new file mode 100644 index 0000000..ef0f52b --- /dev/null +++ b/thallium-backend/migrations/versions/1723831312-ac28edf8dd84_users_and_products.py @@ -0,0 +1,51 @@ +""" +Add users and products to the DB. + +Revision ID: ac28edf8dd84 +Revises: +Create Date: 2024-08-16 18:01:52.768054+00:00 +""" + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = "ac28edf8dd84" +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade() -> None: + """Apply this migration.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_table( + "products", + sa.Column("product_id", sa.Integer(), nullable=False), + sa.Column("name", sa.String(), nullable=False), + sa.Column("description", sa.String(), nullable=False), + sa.Column("price", sa.Numeric(), nullable=False), + sa.Column("image", sa.LargeBinary(), nullable=False), + sa.Column("id", sa.Uuid(), nullable=False), + sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False), + sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False), + sa.PrimaryKeyConstraint("product_id", "id", name=op.f("products_pk")), + ) + op.create_table( + "users", + sa.Column("user_id", sa.Integer(), nullable=False), + sa.Column("is_admin", sa.Boolean(), nullable=False), + sa.Column("id", sa.Uuid(), nullable=False), + sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False), + sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False), + sa.PrimaryKeyConstraint("user_id", "id", name=op.f("users_pk")), + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Revert this migration.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table("users") + op.drop_table("products") + # ### end Alembic commands ### diff --git a/thallium-backend/src/orm/products.py b/thallium-backend/src/orm/products.py new file mode 100644 index 0000000..2c07b75 --- /dev/null +++ b/thallium-backend/src/orm/products.py @@ -0,0 +1,18 @@ +from decimal import Decimal + +from sqlalchemy.orm import Mapped, mapped_column +from sqlalchemy.types import LargeBinary + +from .base import AuditBase, Base + + +class Product(AuditBase, Base): + """A product available to be ordered.""" + + __tablename__ = "products" + + product_id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] + description: Mapped[str] + price: Mapped[Decimal] + image: Mapped[bytes] = mapped_column(LargeBinary, deferred=True) diff --git a/thallium-backend/src/orm/users.py b/thallium-backend/src/orm/users.py new file mode 100644 index 0000000..065519a --- /dev/null +++ b/thallium-backend/src/orm/users.py @@ -0,0 +1,12 @@ +from sqlalchemy.orm import Mapped, mapped_column + +from .base import AuditBase, Base + + +class User(AuditBase, Base): + """An authenticated user of the service.""" + + __tablename__ = "users" + + user_id: Mapped[int] = mapped_column(primary_key=True) + is_admin: Mapped[bool] |