workspace_service.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from extensions.ext_database import db
  2. from models.account import Tenant
  3. from models.provider import Provider, ProviderType
  4. class WorkspaceService:
  5. @classmethod
  6. def get_tenant_info(cls, tenant: Tenant):
  7. tenant_info = {
  8. 'id': tenant.id,
  9. 'name': tenant.name,
  10. 'plan': tenant.plan,
  11. 'status': tenant.status,
  12. 'created_at': tenant.created_at,
  13. 'providers': [],
  14. 'in_trail': False,
  15. 'trial_end_reason': 'using_custom'
  16. }
  17. # Get providers
  18. providers = db.session.query(Provider).filter(
  19. Provider.tenant_id == tenant.id
  20. ).all()
  21. # Add providers to the tenant info
  22. tenant_info['providers'] = providers
  23. custom_provider = None
  24. system_provider = None
  25. for provider in providers:
  26. if provider.provider_type == ProviderType.CUSTOM.value:
  27. if provider.is_valid and provider.encrypted_config:
  28. custom_provider = provider
  29. elif provider.provider_type == ProviderType.SYSTEM.value:
  30. if provider.is_valid:
  31. system_provider = provider
  32. if system_provider and not custom_provider:
  33. quota_used = system_provider.quota_used if system_provider.quota_used is not None else 0
  34. quota_limit = system_provider.quota_limit if system_provider.quota_limit is not None else 0
  35. if quota_used >= quota_limit:
  36. tenant_info['trial_end_reason'] = 'trial_exceeded'
  37. else:
  38. tenant_info['in_trail'] = True
  39. tenant_info['trial_end_reason'] = None
  40. return tenant_info