From 473a4fabfcd3bdc96a9c4cd121a3fee5ceabcef9 Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Fri, 19 Dec 2025 21:18:31 +0100 Subject: [PATCH] feat: add Letzshop historical import migrations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add LetzshopHistoricalImportJob table for progress tracking - Add order_date column to track when orders were placed 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- ...73_add_letzshop_historical_import_jobs_.py | 57 +++++++++++++++++++ ...23a93_add_order_date_to_letzshop_orders.py | 27 +++++++++ 2 files changed, 84 insertions(+) create mode 100644 alembic/versions/204273a59d73_add_letzshop_historical_import_jobs_.py create mode 100644 alembic/versions/2362c2723a93_add_order_date_to_letzshop_orders.py diff --git a/alembic/versions/204273a59d73_add_letzshop_historical_import_jobs_.py b/alembic/versions/204273a59d73_add_letzshop_historical_import_jobs_.py new file mode 100644 index 00000000..52d4a383 --- /dev/null +++ b/alembic/versions/204273a59d73_add_letzshop_historical_import_jobs_.py @@ -0,0 +1,57 @@ +"""add_letzshop_historical_import_jobs_table + +Revision ID: 204273a59d73 +Revises: cb88bc9b5f86 +Create Date: 2025-12-19 05:40:53.463341 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import sqlite + +# revision identifiers, used by Alembic. +revision: str = '204273a59d73' +down_revision: Union[str, None] = 'cb88bc9b5f86' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.create_table('letzshop_historical_import_jobs', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('vendor_id', sa.Integer(), nullable=False), + sa.Column('user_id', sa.Integer(), nullable=False), + sa.Column('status', sa.String(length=50), nullable=False), + sa.Column('current_phase', sa.String(length=20), nullable=True), + sa.Column('current_page', sa.Integer(), nullable=True), + sa.Column('total_pages', sa.Integer(), nullable=True), + sa.Column('shipments_fetched', sa.Integer(), nullable=True), + sa.Column('orders_processed', sa.Integer(), nullable=True), + sa.Column('orders_imported', sa.Integer(), nullable=True), + sa.Column('orders_updated', sa.Integer(), nullable=True), + sa.Column('orders_skipped', sa.Integer(), nullable=True), + sa.Column('products_matched', sa.Integer(), nullable=True), + sa.Column('products_not_found', sa.Integer(), nullable=True), + sa.Column('confirmed_stats', sqlite.JSON(), nullable=True), + sa.Column('declined_stats', sqlite.JSON(), nullable=True), + sa.Column('error_message', sa.Text(), nullable=True), + sa.Column('started_at', sa.DateTime(timezone=True), nullable=True), + sa.Column('completed_at', sa.DateTime(timezone=True), nullable=True), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.Column('updated_at', sa.DateTime(), nullable=False), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.ForeignKeyConstraint(['vendor_id'], ['vendors.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_index('idx_historical_import_vendor', 'letzshop_historical_import_jobs', ['vendor_id', 'status'], unique=False) + op.create_index(op.f('ix_letzshop_historical_import_jobs_id'), 'letzshop_historical_import_jobs', ['id'], unique=False) + op.create_index(op.f('ix_letzshop_historical_import_jobs_vendor_id'), 'letzshop_historical_import_jobs', ['vendor_id'], unique=False) + + +def downgrade() -> None: + op.drop_index(op.f('ix_letzshop_historical_import_jobs_vendor_id'), table_name='letzshop_historical_import_jobs') + op.drop_index(op.f('ix_letzshop_historical_import_jobs_id'), table_name='letzshop_historical_import_jobs') + op.drop_index('idx_historical_import_vendor', table_name='letzshop_historical_import_jobs') + op.drop_table('letzshop_historical_import_jobs') diff --git a/alembic/versions/2362c2723a93_add_order_date_to_letzshop_orders.py b/alembic/versions/2362c2723a93_add_order_date_to_letzshop_orders.py new file mode 100644 index 00000000..c96cc7e1 --- /dev/null +++ b/alembic/versions/2362c2723a93_add_order_date_to_letzshop_orders.py @@ -0,0 +1,27 @@ +"""add_order_date_to_letzshop_orders + +Revision ID: 2362c2723a93 +Revises: 204273a59d73 +Create Date: 2025-12-19 08:46:23.731912 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '2362c2723a93' +down_revision: Union[str, None] = '204273a59d73' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # Add order_date column to letzshop_orders table + op.add_column('letzshop_orders', sa.Column('order_date', sa.DateTime(timezone=True), nullable=True)) + + +def downgrade() -> None: + op.drop_column('letzshop_orders', 'order_date')