fix: include language parameter in marketplace import
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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')
|
||||||
@@ -48,6 +48,7 @@ class MarketplaceImportJobService:
|
|||||||
status="pending",
|
status="pending",
|
||||||
source_url=request.source_url,
|
source_url=request.source_url,
|
||||||
marketplace=request.marketplace,
|
marketplace=request.marketplace,
|
||||||
|
language=request.language,
|
||||||
vendor_id=vendor.id,
|
vendor_id=vendor.id,
|
||||||
user_id=user.id,
|
user_id=user.id,
|
||||||
)
|
)
|
||||||
@@ -185,6 +186,7 @@ class MarketplaceImportJobService:
|
|||||||
job_id=job.id,
|
job_id=job.id,
|
||||||
status=job.status,
|
status=job.status,
|
||||||
marketplace=job.marketplace,
|
marketplace=job.marketplace,
|
||||||
|
language=job.language,
|
||||||
vendor_id=job.vendor_id,
|
vendor_id=job.vendor_id,
|
||||||
vendor_code=job.vendor.vendor_code if job.vendor else None,
|
vendor_code=job.vendor.vendor_code if job.vendor else None,
|
||||||
vendor_name=job.vendor.name 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,
|
job_id=job.id,
|
||||||
status=job.status,
|
status=job.status,
|
||||||
marketplace=job.marketplace,
|
marketplace=job.marketplace,
|
||||||
|
language=job.language,
|
||||||
vendor_id=job.vendor_id,
|
vendor_id=job.vendor_id,
|
||||||
vendor_code=job.vendor.vendor_code if job.vendor else None,
|
vendor_code=job.vendor.vendor_code if job.vendor else None,
|
||||||
vendor_name=job.vendor.name if job.vendor else None,
|
vendor_name=job.vendor.name if job.vendor else None,
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ class MarketplaceImportJob(Base, TimestampMixin):
|
|||||||
# Import configuration
|
# Import configuration
|
||||||
marketplace = Column(String, nullable=False, index=True, default="Letzshop")
|
marketplace = Column(String, nullable=False, index=True, default="Letzshop")
|
||||||
source_url = Column(String, nullable=False)
|
source_url = Column(String, nullable=False)
|
||||||
|
language = Column(String(5), nullable=False, default="en") # Language for translations
|
||||||
|
|
||||||
# Status tracking
|
# Status tracking
|
||||||
status = Column(
|
status = Column(
|
||||||
|
|||||||
@@ -258,7 +258,8 @@ function adminMarketplace() {
|
|||||||
vendor_id: parseInt(this.importForm.vendor_id),
|
vendor_id: parseInt(this.importForm.vendor_id),
|
||||||
source_url: this.importForm.csv_url,
|
source_url: this.importForm.csv_url,
|
||||||
marketplace: this.importForm.marketplace,
|
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);
|
adminMarketplaceLog.info('Starting import:', payload);
|
||||||
|
|||||||
Reference in New Issue
Block a user