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

@@ -218,9 +218,20 @@ class FeatureService:
self, db: Session, store_id: int, feature_code: str
) -> bool:
"""
Check if a store has access to a feature (resolves store -> merchant).
Convenience method that resolves the store -> merchant -> platform
hierarchy and checks whether the merchant has access to a feature.
Convenience method for backwards compatibility.
Looks up the store's merchant_id and platform_id, then delegates
to has_feature().
Args:
db: Database session.
store_id: The store ID to resolve.
feature_code: The feature code to check.
Returns:
True if the resolved merchant has access to the feature,
False if the store/merchant cannot be resolved or lacks access.
"""
merchant_id, platform_id = self._get_merchant_for_store(db, store_id)
if merchant_id is None or platform_id is None:

View File

@@ -29,9 +29,7 @@ from datetime import UTC, datetime, timedelta
from sqlalchemy.orm import Session, joinedload
from app.exceptions import ResourceNotFoundException
from app.modules.billing.exceptions import (
SubscriptionNotFoundException, # Re-exported for backward compatibility
)
from app.modules.billing.exceptions import SubscriptionNotFoundException
from app.modules.billing.models import (
MerchantSubscription,
SubscriptionStatus,
@@ -159,9 +157,19 @@ class SubscriptionService:
self, db: Session, store_id: int
) -> MerchantSubscription | None:
"""
Resolve store merchant → subscription.
Convenience method that resolves the store -> merchant -> platform
hierarchy and returns the associated merchant subscription.
Convenience method for backwards compatibility with store-level code.
Looks up the store's merchant_id and platform_id, then delegates
to get_merchant_subscription().
Args:
db: Database session.
store_id: The store ID to resolve.
Returns:
The merchant subscription, or None if the store, merchant,
or platform cannot be resolved.
"""
from app.modules.tenancy.models import Store