refactor: move letzshop endpoints to marketplace module and add vendor service tests

Move letzshop-related functionality from tenancy to marketplace module:
- Move admin letzshop routes to marketplace/routes/api/admin_letzshop.py
- Move letzshop schemas to marketplace/schemas/letzshop.py
- Remove letzshop code from tenancy module (admin_vendors, vendor_service)
- Update model exports and imports

Add comprehensive unit tests for vendor services:
- test_company_service.py: Company management operations
- test_platform_service.py: Platform management operations
- test_vendor_domain_service.py: Vendor domain operations
- test_vendor_team_service.py: Vendor team management

Update module definitions:
- billing, messaging, payments: Minor definition updates

Add architecture proposals documentation:
- Module dependency redesign session notes
- Decouple modules implementation plan
- Module decoupling proposal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-04 19:25:00 +01:00
parent 37942ae02b
commit 0583dd2cc4
29 changed files with 3643 additions and 650 deletions

View File

@@ -18,9 +18,16 @@ Usage:
# These imports are NOT re-exported, just ensure models are registered with SQLAlchemy
# before the marketplace models are loaded.
#
# Relationship being resolved:
# Relationships being resolved:
# - LetzshopFulfillmentQueue.order -> "Order" (in orders module)
# - MarketplaceImportJob.vendor -> "Vendor" (in tenancy module)
# - MarketplaceImportJob.user -> "User" (in tenancy module)
#
# NOTE: This module owns the relationships to tenancy models (User, Vendor).
# Core models should NOT have back-references to optional module models.
from app.modules.orders.models import Order # noqa: F401
from app.modules.tenancy.models.user import User # noqa: F401
from app.modules.tenancy.models.vendor import Vendor # noqa: F401
from app.modules.marketplace.models.marketplace_product import (
MarketplaceProduct,

View File

@@ -95,7 +95,9 @@ class MarketplaceImportJob(Base, TimestampMixin):
completed_at = Column(DateTime(timezone=True))
# Relationships
vendor = relationship("Vendor", back_populates="marketplace_import_jobs")
# NOTE: No back_populates - optional modules own relationships to core models
# Core models (User, Vendor) don't have back-references to optional modules
vendor = relationship("Vendor")
user = relationship("User", foreign_keys=[user_id])
errors = relationship(
"MarketplaceImportError",