From 8e5da6fec38a9b058436a6cef041bb1a7612c13b Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sat, 13 Dec 2025 13:36:56 +0100 Subject: [PATCH] fix: include language parameter in marketplace import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: Language selector worked on UI but import always used 'en' Root causes: 1. Frontend: startImport() was not including language in API payload 2. Backend: language was not stored in import job database record 3. Backend: language was not returned in API response models Fixes: - Add language to payload in marketplace.js startImport() - Add language column to MarketplaceImportJob model - Store language when creating import job in service - Include language in both response model converters - Add database migration for language column 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- ...c2e_add_language_column_to_marketplace_.py | 30 +++++++++++++++++++ .../marketplace_import_job_service.py | 3 ++ models/database/marketplace_import_job.py | 1 + static/admin/js/marketplace.js | 3 +- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 alembic/versions/b412e0b49c2e_add_language_column_to_marketplace_.py diff --git a/alembic/versions/b412e0b49c2e_add_language_column_to_marketplace_.py b/alembic/versions/b412e0b49c2e_add_language_column_to_marketplace_.py new file mode 100644 index 00000000..1c1ca208 --- /dev/null +++ b/alembic/versions/b412e0b49c2e_add_language_column_to_marketplace_.py @@ -0,0 +1,30 @@ +"""add language column to marketplace_import_jobs + +Revision ID: b412e0b49c2e +Revises: 91d02647efae +Create Date: 2025-12-13 13:35:46.524893 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'b412e0b49c2e' +down_revision: Union[str, None] = '91d02647efae' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # Add language column with default value for existing rows + op.add_column( + 'marketplace_import_jobs', + sa.Column('language', sa.String(length=5), nullable=False, server_default='en') + ) + + +def downgrade() -> None: + op.drop_column('marketplace_import_jobs', 'language') diff --git a/app/services/marketplace_import_job_service.py b/app/services/marketplace_import_job_service.py index b34d8691..1e2b77e5 100644 --- a/app/services/marketplace_import_job_service.py +++ b/app/services/marketplace_import_job_service.py @@ -48,6 +48,7 @@ class MarketplaceImportJobService: status="pending", source_url=request.source_url, marketplace=request.marketplace, + language=request.language, vendor_id=vendor.id, user_id=user.id, ) @@ -185,6 +186,7 @@ class MarketplaceImportJobService: job_id=job.id, status=job.status, marketplace=job.marketplace, + language=job.language, vendor_id=job.vendor_id, vendor_code=job.vendor.vendor_code if job.vendor else None, vendor_name=job.vendor.name if job.vendor else None, @@ -208,6 +210,7 @@ class MarketplaceImportJobService: job_id=job.id, status=job.status, marketplace=job.marketplace, + language=job.language, vendor_id=job.vendor_id, vendor_code=job.vendor.vendor_code if job.vendor else None, vendor_name=job.vendor.name if job.vendor else None, diff --git a/models/database/marketplace_import_job.py b/models/database/marketplace_import_job.py index ebc2caca..3f6d3c2f 100644 --- a/models/database/marketplace_import_job.py +++ b/models/database/marketplace_import_job.py @@ -64,6 +64,7 @@ class MarketplaceImportJob(Base, TimestampMixin): # Import configuration marketplace = Column(String, nullable=False, index=True, default="Letzshop") source_url = Column(String, nullable=False) + language = Column(String(5), nullable=False, default="en") # Language for translations # Status tracking status = Column( diff --git a/static/admin/js/marketplace.js b/static/admin/js/marketplace.js index bc14a832..20224d88 100644 --- a/static/admin/js/marketplace.js +++ b/static/admin/js/marketplace.js @@ -258,7 +258,8 @@ function adminMarketplace() { vendor_id: parseInt(this.importForm.vendor_id), source_url: this.importForm.csv_url, marketplace: this.importForm.marketplace, - batch_size: this.importForm.batch_size + batch_size: this.importForm.batch_size, + language: this.importForm.language // Include selected language }; adminMarketplaceLog.info('Starting import:', payload);