refactor(arch): eliminate all cross-module model imports in service layer
Some checks failed
Some checks failed
Enforce MOD-025/MOD-026 rules: zero top-level cross-module model imports remain in any service file. All 66 files migrated using deferred import patterns (method-body, _get_model() helpers, instance-cached self._Model) and new cross-module service methods in tenancy. Documentation updated with Pattern 6 (deferred imports), migration plan marked complete, and violations status reflects 84→0 service-layer violations. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -54,12 +54,12 @@ class MarketplaceMetricsProvider:
|
||||
MarketplaceImportJob,
|
||||
MarketplaceProduct,
|
||||
)
|
||||
from app.modules.tenancy.models import Store
|
||||
from app.modules.tenancy.services.store_service import store_service
|
||||
|
||||
try:
|
||||
# Get store name for MarketplaceProduct queries
|
||||
# (MarketplaceProduct uses store_name, not store_id)
|
||||
store = db.query(Store).filter(Store.id == store_id).first()
|
||||
store = store_service.get_store_by_id_optional(db, store_id)
|
||||
store_name = store.name if store else ""
|
||||
|
||||
# Staging products
|
||||
@@ -200,18 +200,11 @@ class MarketplaceMetricsProvider:
|
||||
MarketplaceImportJob,
|
||||
MarketplaceProduct,
|
||||
)
|
||||
from app.modules.tenancy.models import StorePlatform
|
||||
from app.modules.tenancy.services.platform_service import platform_service
|
||||
|
||||
try:
|
||||
# Get all store IDs for this platform using StorePlatform junction table
|
||||
store_ids = (
|
||||
db.query(StorePlatform.store_id)
|
||||
.filter(
|
||||
StorePlatform.platform_id == platform_id,
|
||||
StorePlatform.is_active == True,
|
||||
)
|
||||
.subquery()
|
||||
)
|
||||
# Get all store IDs for this platform
|
||||
platform_store_ids = platform_service.get_store_ids_for_platform(db, platform_id)
|
||||
|
||||
# Total staging products (across all stores)
|
||||
# Note: MarketplaceProduct doesn't have direct platform_id link
|
||||
@@ -239,14 +232,14 @@ class MarketplaceMetricsProvider:
|
||||
# Import jobs
|
||||
total_imports = (
|
||||
db.query(MarketplaceImportJob)
|
||||
.filter(MarketplaceImportJob.store_id.in_(store_ids))
|
||||
.filter(MarketplaceImportJob.store_id.in_(platform_store_ids))
|
||||
.count()
|
||||
)
|
||||
|
||||
successful_imports = (
|
||||
db.query(MarketplaceImportJob)
|
||||
.filter(
|
||||
MarketplaceImportJob.store_id.in_(store_ids),
|
||||
MarketplaceImportJob.store_id.in_(platform_store_ids),
|
||||
MarketplaceImportJob.status.in_(["completed", "completed_with_errors"]),
|
||||
)
|
||||
.count()
|
||||
@@ -255,7 +248,7 @@ class MarketplaceMetricsProvider:
|
||||
failed_imports = (
|
||||
db.query(MarketplaceImportJob)
|
||||
.filter(
|
||||
MarketplaceImportJob.store_id.in_(store_ids),
|
||||
MarketplaceImportJob.store_id.in_(platform_store_ids),
|
||||
MarketplaceImportJob.status == "failed",
|
||||
)
|
||||
.count()
|
||||
@@ -264,7 +257,7 @@ class MarketplaceMetricsProvider:
|
||||
pending_imports = (
|
||||
db.query(MarketplaceImportJob)
|
||||
.filter(
|
||||
MarketplaceImportJob.store_id.in_(store_ids),
|
||||
MarketplaceImportJob.store_id.in_(platform_store_ids),
|
||||
MarketplaceImportJob.status == "pending",
|
||||
)
|
||||
.count()
|
||||
@@ -273,7 +266,7 @@ class MarketplaceMetricsProvider:
|
||||
processing_imports = (
|
||||
db.query(MarketplaceImportJob)
|
||||
.filter(
|
||||
MarketplaceImportJob.store_id.in_(store_ids),
|
||||
MarketplaceImportJob.store_id.in_(platform_store_ids),
|
||||
MarketplaceImportJob.status == "processing",
|
||||
)
|
||||
.count()
|
||||
@@ -287,7 +280,7 @@ class MarketplaceMetricsProvider:
|
||||
# Stores with imports
|
||||
stores_with_imports = (
|
||||
db.query(func.count(func.distinct(MarketplaceImportJob.store_id)))
|
||||
.filter(MarketplaceImportJob.store_id.in_(store_ids))
|
||||
.filter(MarketplaceImportJob.store_id.in_(platform_store_ids))
|
||||
.scalar()
|
||||
or 0
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user