aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--thallium-backend/migrations/versions/1723831312-ac28edf8dd84_users_and_products.py51
-rw-r--r--thallium-backend/src/orm/products.py18
-rw-r--r--thallium-backend/src/orm/users.py12
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]