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:
@@ -802,6 +802,14 @@ class AdminService:
|
||||
"""
|
||||
return db.query(User).filter(User.id == user_id).first()
|
||||
|
||||
def get_user_by_email(self, db: Session, email: str) -> User | None:
|
||||
"""Get user by email."""
|
||||
return db.query(User).filter(User.email == email).first()
|
||||
|
||||
def get_user_by_username(self, db: Session, username: str) -> User | None:
|
||||
"""Get user by username."""
|
||||
return db.query(User).filter(User.username == username).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()
|
||||
@@ -871,5 +879,40 @@ class AdminService:
|
||||
db.add_all(roles)
|
||||
|
||||
|
||||
def get_user_statistics(self, db: Session) -> dict:
|
||||
"""
|
||||
Get user statistics for dashboards.
|
||||
|
||||
Returns:
|
||||
Dict with total_users, active_users, inactive_users, admin_users, activation_rate
|
||||
"""
|
||||
from sqlalchemy import func
|
||||
|
||||
total_users = db.query(func.count(User.id)).scalar() or 0
|
||||
active_users = (
|
||||
db.query(func.count(User.id))
|
||||
.filter(User.is_active == True) # noqa: E712
|
||||
.scalar()
|
||||
or 0
|
||||
)
|
||||
inactive_users = total_users - active_users
|
||||
admin_users = (
|
||||
db.query(func.count(User.id))
|
||||
.filter(User.role.in_(["super_admin", "platform_admin"]))
|
||||
.scalar()
|
||||
or 0
|
||||
)
|
||||
|
||||
return {
|
||||
"total_users": total_users,
|
||||
"active_users": active_users,
|
||||
"inactive_users": inactive_users,
|
||||
"admin_users": admin_users,
|
||||
"activation_rate": (
|
||||
(active_users / total_users * 100) if total_users > 0 else 0
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
# Create service instance
|
||||
admin_service = AdminService()
|
||||
|
||||
Reference in New Issue
Block a user