diff --git a/alembic/versions/c3d4e5f6a7b8_add_page_tracking_to_orders.py b/alembic/versions/c3d4e5f6a7b8_add_page_tracking_to_orders.py new file mode 100644 index 0000000..9547d38 --- /dev/null +++ b/alembic/versions/c3d4e5f6a7b8_add_page_tracking_to_orders.py @@ -0,0 +1,55 @@ +"""add page_config_id to orders, market_place_id to cart_items + +Revision ID: c3d4e5f6a7b8 +Revises: b2c3d4e5f6a7 +Create Date: 2026-02-10 +""" +from alembic import op +import sqlalchemy as sa + +revision = 'c3d4e5f6a7b8' +down_revision = 'b2c3d4e5f6a7' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # 1. Add market_place_id to cart_items + op.add_column( + 'cart_items', + sa.Column('market_place_id', sa.Integer(), nullable=True), + ) + op.create_foreign_key( + 'fk_cart_items_market_place_id', + 'cart_items', + 'market_places', + ['market_place_id'], + ['id'], + ondelete='SET NULL', + ) + op.create_index('ix_cart_items_market_place_id', 'cart_items', ['market_place_id']) + + # 2. Add page_config_id to orders + op.add_column( + 'orders', + sa.Column('page_config_id', sa.Integer(), nullable=True), + ) + op.create_foreign_key( + 'fk_orders_page_config_id', + 'orders', + 'page_configs', + ['page_config_id'], + ['id'], + ondelete='SET NULL', + ) + op.create_index('ix_orders_page_config_id', 'orders', ['page_config_id']) + + +def downgrade() -> None: + op.drop_index('ix_orders_page_config_id', table_name='orders') + op.drop_constraint('fk_orders_page_config_id', 'orders', type_='foreignkey') + op.drop_column('orders', 'page_config_id') + + op.drop_index('ix_cart_items_market_place_id', table_name='cart_items') + op.drop_constraint('fk_cart_items_market_place_id', 'cart_items', type_='foreignkey') + op.drop_column('cart_items', 'market_place_id') diff --git a/models/market.py b/models/market.py index 58462a1..a901cda 100644 --- a/models/market.py +++ b/models/market.py @@ -413,13 +413,23 @@ class CartItem(Base): nullable=False, server_default=func.now(), ) + market_place_id: Mapped[int | None] = mapped_column( + ForeignKey("market_places.id", ondelete="SET NULL"), + nullable=True, + index=True, + ) + deleted_at: Mapped[datetime | None] = mapped_column( DateTime(timezone=True), nullable=True, ) # Relationships - + + market_place: Mapped["MarketPlace | None"] = relationship( + "MarketPlace", + foreign_keys=[market_place_id], + ) product: Mapped["Product"] = relationship( "Product", back_populates="cart_items", diff --git a/models/order.py b/models/order.py index 6534ca1..e084166 100644 --- a/models/order.py +++ b/models/order.py @@ -17,6 +17,12 @@ class Order(Base): user_id: Mapped[Optional[int]] = mapped_column(ForeignKey("users.id"), nullable=True) session_id: Mapped[Optional[str]] = mapped_column(String(64), index=True, nullable=True) + page_config_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("page_configs.id", ondelete="SET NULL"), + nullable=True, + index=True, + ) + status: Mapped[str] = mapped_column( String(32), nullable=False, @@ -68,6 +74,11 @@ class Order(Base): back_populates="order", lazy="selectin", ) + page_config: Mapped[Optional["PageConfig"]] = relationship( + "PageConfig", + foreign_keys=[page_config_id], + lazy="selectin", + ) class OrderItem(Base):