refactor(arch): move auth schemas to tenancy module and add cross-module service methods
Some checks failed
Some checks failed
Move all auth schemas (UserContext, UserLogin, LoginResponse, etc.) from legacy models/schema/auth.py to app/modules/tenancy/schemas/auth.py per MOD-019. Update 84 import sites across 14 modules. Legacy file now re-exports for backwards compatibility. Add missing tenancy service methods for cross-module consumers: - merchant_service.get_merchant_by_owner_id() - merchant_service.get_merchant_count_for_owner() - admin_service.get_user_by_id() (public, was private-only) - platform_service.get_active_store_count() Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -23,7 +23,7 @@ from app.modules.tenancy.exceptions import (
|
||||
UserNotFoundException,
|
||||
)
|
||||
from app.modules.tenancy.models import AdminPlatform, Platform, User
|
||||
from models.schema.auth import UserContext
|
||||
from app.modules.tenancy.schemas.auth import UserContext
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -786,6 +786,22 @@ class AdminService:
|
||||
# PRIVATE HELPER METHODS
|
||||
# ============================================================================
|
||||
|
||||
def get_user_by_id(self, db: Session, user_id: int) -> User | None:
|
||||
"""
|
||||
Get user by ID.
|
||||
|
||||
Public method for cross-module consumers that need to look up a user.
|
||||
Returns None if not found (does not raise).
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
user_id: User ID
|
||||
|
||||
Returns:
|
||||
User object or None
|
||||
"""
|
||||
return db.query(User).filter(User.id == user_id).first()
|
||||
|
||||
def _get_user_by_id_or_raise(self, db: Session, user_id: int) -> User:
|
||||
"""Get user by ID or raise UserNotFoundException."""
|
||||
user = db.query(User).filter(User.id == user_id).first()
|
||||
|
||||
@@ -329,6 +329,49 @@ class MerchantService:
|
||||
|
||||
return merchant, old_owner, new_owner
|
||||
|
||||
def get_merchant_by_owner_id(
|
||||
self, db: Session, owner_user_id: int
|
||||
) -> Merchant | None:
|
||||
"""
|
||||
Get merchant by owner user ID.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
owner_user_id: Owner user ID
|
||||
|
||||
Returns:
|
||||
First active merchant owned by the user, or None
|
||||
"""
|
||||
return (
|
||||
db.query(Merchant)
|
||||
.filter(
|
||||
Merchant.owner_user_id == owner_user_id,
|
||||
Merchant.is_active == True, # noqa: E712
|
||||
)
|
||||
.first()
|
||||
)
|
||||
|
||||
def get_merchant_count_for_owner(
|
||||
self, db: Session, owner_user_id: int, active_only: bool = True
|
||||
) -> int:
|
||||
"""
|
||||
Count merchants owned by a user.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
owner_user_id: Owner user ID
|
||||
active_only: Only count active merchants
|
||||
|
||||
Returns:
|
||||
Number of merchants
|
||||
"""
|
||||
query = db.query(func.count(Merchant.id)).filter(
|
||||
Merchant.owner_user_id == owner_user_id
|
||||
)
|
||||
if active_only:
|
||||
query = query.filter(Merchant.is_active == True) # noqa: E712
|
||||
return query.scalar() or 0
|
||||
|
||||
def get_merchant_stores(
|
||||
self, db: Session, merchant_id: int, skip: int = 0, limit: int = 100
|
||||
) -> tuple[list, int]:
|
||||
|
||||
@@ -142,6 +142,31 @@ class PlatformService:
|
||||
or 0
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_active_store_count(db: Session, platform_id: int) -> int:
|
||||
"""
|
||||
Get count of active stores on a platform.
|
||||
|
||||
Args:
|
||||
db: Database session
|
||||
platform_id: Platform ID
|
||||
|
||||
Returns:
|
||||
Active store count
|
||||
"""
|
||||
from app.modules.tenancy.models import Store
|
||||
|
||||
return (
|
||||
db.query(func.count(StorePlatform.store_id))
|
||||
.join(Store, Store.id == StorePlatform.store_id)
|
||||
.filter(
|
||||
StorePlatform.platform_id == platform_id,
|
||||
Store.is_active == True, # noqa: E712
|
||||
)
|
||||
.scalar()
|
||||
or 0
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_platform_pages_count(db: Session, platform_id: int) -> int:
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user