Add subcription feature 3

This commit is contained in:
Urtzi Alfaro
2026-01-15 20:45:49 +01:00
parent a4c3b7da3f
commit b674708a4c
83 changed files with 9451 additions and 6828 deletions

View File

@@ -5,15 +5,13 @@ Business logic services for authentication and user management
from .auth_service import AuthService
from .auth_service import EnhancedAuthService
from .user_service import UserService
from .auth_service import EnhancedUserService
from .user_service import EnhancedUserService
from .auth_service_clients import AuthServiceClientFactory
from .admin_delete import AdminUserDeleteService
__all__ = [
"AuthService",
"EnhancedAuthService",
"UserService",
"EnhancedUserService",
"AuthServiceClientFactory",
"AdminUserDeleteService"

File diff suppressed because it is too large Load Diff

View File

@@ -43,7 +43,7 @@ class AuthTenantServiceClient(BaseServiceClient):
result = await self.get(f"tenants/user/{user_id}")
return result.get("memberships", []) if result else []
except Exception as e:
logger.error("Failed to get user tenants", user_id=user_id, error=str(e))
logger.error(f"Failed to get user tenants: {str(e)}, user_id: {user_id}")
return []
async def get_user_owned_tenants(self, user_id: str) -> Optional[List[Dict[str, Any]]]:
@@ -54,7 +54,7 @@ class AuthTenantServiceClient(BaseServiceClient):
return [m for m in memberships if m.get('role') == 'owner']
return []
except Exception as e:
logger.error("Failed to get owned tenants", user_id=user_id, error=str(e))
logger.error(f"Failed to get owned tenants: {str(e)}, user_id: {user_id}")
return []
async def transfer_tenant_ownership(
@@ -81,7 +81,7 @@ class AuthTenantServiceClient(BaseServiceClient):
try:
return await self.delete(f"tenants/{tenant_id}")
except Exception as e:
logger.error("Failed to delete tenant", tenant_id=tenant_id, error=str(e))
logger.error(f"Failed to delete tenant: {str(e)}, tenant_id: {tenant_id}")
return None
async def delete_user_memberships(self, user_id: str) -> Optional[Dict[str, Any]]:
@@ -89,7 +89,7 @@ class AuthTenantServiceClient(BaseServiceClient):
try:
return await self.delete(f"/tenants/user/{user_id}/memberships")
except Exception as e:
logger.error("Failed to delete user memberships", user_id=user_id, error=str(e))
logger.error(f"Failed to delete user memberships: {str(e)}, user_id: {user_id}")
return None
async def get_tenant_members(self, tenant_id: str) -> Optional[List[Dict[str, Any]]]:
@@ -98,7 +98,7 @@ class AuthTenantServiceClient(BaseServiceClient):
result = await self.get(f"tenants/{tenant_id}/members")
return result.get("members", []) if result else []
except Exception as e:
logger.error("Failed to get tenant members", tenant_id=tenant_id, error=str(e))
logger.error(f"Failed to get tenant members: {str(e)}, tenant_id: {tenant_id}")
return []
async def check_tenant_has_other_admins(self, tenant_id: str, excluding_user_id: str) -> bool:

View File

@@ -34,28 +34,29 @@ class EnhancedUserService:
if session:
# Use provided session (for direct session injection)
user_repo = UserRepository(User, session)
user = await user_repo.get_by_id(user_id)
else:
# Use database manager to get session
async with self.database_manager.get_session() as session:
user_repo = UserRepository(User, session)
user = await user_repo.get_by_id(user_id)
async with self.database_manager.get_session() as db_session:
user_repo = UserRepository(User, db_session)
user = await user_repo.get_by_id(user_id)
if not user:
return None
return UserResponse(
id=str(user.id),
email=user.email,
full_name=user.full_name,
is_active=user.is_active,
is_verified=user.is_verified,
created_at=user.created_at,
role=user.role,
phone=getattr(user, 'phone', None),
language=getattr(user, 'language', None),
timezone=getattr(user, 'timezone', None)
)
created_at=user.created_at,
role=user.role,
phone=getattr(user, 'phone', None),
language=getattr(user, 'language', None),
timezone=getattr(user, 'timezone', None)
)
except Exception as e:
logger.error("Failed to get user by ID using repository pattern",
user_id=user_id,
@@ -521,6 +522,3 @@ class EnhancedUserService:
error=str(e))
return {"error": str(e)}
# Legacy compatibility - alias EnhancedUserService as UserService
UserService = EnhancedUserService