refactor: remove all backward compatibility code across 70 files
Some checks failed
CI / ruff (push) Successful in 11s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has started running

Clean up 28 backward compatibility instances identified in the codebase.
The app is not live, so all shims are replaced with the target architecture:

- Remove legacy Inventory.location column (use bin_location exclusively)
- Remove dashboard _extract_metric_value helper (use flat metrics dict)
- Remove legacy stat field duplicates (total_stores, total_imports, etc.)
- Remove 13 re-export shims and class aliases across modules
- Remove module-enabling JSON fallback (use PlatformModule junction table)
- Remove menu_to_legacy_format() conversion (return dataclasses directly)
- Remove title/description from MarketplaceProductBase schema
- Clean billing convenience method docstrings
- Clean test fixtures and backward-compat comments
- Add PlatformModule seeding to init_production.py

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 13:20:29 +01:00
parent b0db8133a0
commit aad18c27ab
70 changed files with 501 additions and 841 deletions

View File

@@ -57,9 +57,6 @@ class AdminAuditLog(Base, TimestampMixin):
return f"<AdminAuditLog(id={self.id}, action='{self.action}', target={self.target_type}:{self.target_id})>"
# AdminNotification has been moved to app/modules/messaging/models/admin_notification.py
# It's re-exported via models/database/__init__.py for backwards compatibility
class AdminSetting(Base, TimestampMixin):
"""

View File

@@ -9,7 +9,7 @@ Individual stores can optionally override this with their own custom StoreDomain
Domain Resolution Priority:
1. Store-specific custom domain (StoreDomain) -> highest priority
2. Merchant domain (MerchantDomain) -> inherited default
3. Store subdomain ({store.subdomain}.loyalty.lu) -> fallback
3. Store subdomain ({store.subdomain}.rewardflow.lu) -> fallback
"""
from sqlalchemy import (

View File

@@ -80,7 +80,7 @@ class Platform(Base, TimestampMixin):
unique=True,
nullable=True,
index=True,
comment="Production domain (e.g., 'oms.lu', 'loyalty.lu')",
comment="Production domain (e.g., 'omsflow.lu', 'rewardflow.lu')",
)
path_prefix = Column(

View File

@@ -6,9 +6,6 @@ This junction table provides:
- Auditability: Track when modules were enabled/disabled and by whom
- Configuration: Per-module settings specific to each platform
- State tracking: Explicit enabled/disabled states with timestamps
Replaces the simpler Platform.settings["enabled_modules"] JSON approach
for better auditability and query capabilities.
"""
from sqlalchemy import (

View File

@@ -208,9 +208,8 @@ def update_store(
return _build_store_detail_response(store)
# NOTE: Ownership transfer is now at the Merchant level.
# NOTE: Ownership transfer is handled at the Merchant level.
# Use PUT /api/v1/admin/merchants/{id}/transfer-ownership instead.
# This endpoint is kept for backwards compatibility but may be removed in future versions.
@admin_stores_router.put("/{store_identifier}/verification", response_model=StoreDetailResponse)

View File

@@ -206,7 +206,7 @@ class StoreResponse(BaseModel):
is_active: bool
is_verified: bool
# Language Settings (optional with defaults for backward compatibility)
# Language Settings (optional with sensible defaults)
default_language: str = "fr"
dashboard_language: str = "fr"
storefront_language: str = "fr"

View File

@@ -197,7 +197,7 @@
<input
type="text"
x-model="formData.domain"
placeholder="e.g., oms.lu"
placeholder="e.g., omsflow.lu"
:disabled="saving"
class="block w-full mt-1 text-sm dark:text-gray-300 dark:border-gray-600 dark:bg-gray-700 focus:border-purple-400 focus:outline-none focus:shadow-outline-purple dark:focus:shadow-outline-gray form-input"
>