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:
2025-12-13 13:36:56 +01:00
parent c2f42c2913
commit 8e5da6fec3
4 changed files with 36 additions and 1 deletions

View File

@@ -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')

View File

@@ -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,

View File

@@ -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(

View File

@@ -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);