feat(license): refactor available team members handling in feature service.

- add tenant_id support to info request methods
This commit is contained in:
zhangx1n 2025-03-31 17:26:08 +08:00
parent 2e419ca3ba
commit 18362c38e7
3 changed files with 13 additions and 5 deletions

View File

@ -17,6 +17,7 @@ from libs.login import login_required
from models.account import Account, TenantAccountRole
from services.account_service import RegisterService, TenantService
from services.errors.account import AccountAlreadyInTenantError
from services.feature_service import FeatureService
class MemberListApi(Resource):
@ -55,7 +56,7 @@ class MemberInviteEmailApi(Resource):
invitation_results = []
console_web_url = dify_config.CONSOLE_WEB_URL
if (FeatureService.get_system_features().license.product_id == "DIFY_ENTERPRISE_STANDARD" and
len(invitee_emails) > FeatureService.get_system_features().available_team_members):
len(invitee_emails) > FeatureService.get_features(tenant_id=inviter.current_tenant.id).available_team_members):
return {
"code": "limit-exceeded",
"message": "Limit exceeded",
@ -80,6 +81,7 @@ class MemberInviteEmailApi(Resource):
)
break
except Exception as e:
print(str(e))
invitation_results.append({"status": "failed", "email": invitee_email, "message": str(e)})
return {

View File

@ -585,7 +585,7 @@ class TenantService:
if not FeatureService.get_system_features().is_allow_create_workspace and not is_setup:
raise WorkSpaceNotAllowedCreateError()
if FeatureService.get_system_features().license.product_id == "DIFY_ENTERPRISE_STANDARD" and FeatureService.get_system_features().available_workspaces == 0:
if FeatureService.get_system_features().license.product_id == "DIFY_ENTERPRISE_STANDARD" and FeatureService.get_system_features().available_workspaces <= 0:
raise WorkSpaceNotAllowedCreateError()
if name:

View File

@ -35,7 +35,6 @@ class LicenseModel(BaseModel):
status: LicenseStatus = LicenseStatus.NONE
expired_at: str = ""
product_id: str = ""
available_team_members: int = 0
available_workspaces: int = 0
@ -59,6 +58,7 @@ class FeatureModel(BaseModel):
model_load_balancing_enabled: bool = False
dataset_operator_enabled: bool = False
webapp_copyright_enabled: bool = False
available_team_members: int = 0
# pydantic configs
model_config = ConfigDict(protected_namespaces=())
@ -92,6 +92,7 @@ class FeatureService:
if dify_config.ENTERPRISE_ENABLED:
features.webapp_copyright_enabled = True
cls._fulfill_parms_from_license(features, tenant_id)
return features
@ -123,6 +124,11 @@ class FeatureService:
features.model_load_balancing_enabled = dify_config.MODEL_LB_ENABLED
features.dataset_operator_enabled = dify_config.DATASET_OPERATOR_ENABLED
@classmethod
def _fulfill_parms_from_license(cls, features: FeatureModel, tenant_id: str):
license_info = EnterpriseService.get_info(tenant_id)["License"]
features.available_team_members = license_info["availableTeamMembers"]
@classmethod
def _fulfill_params_from_billing_api(cls, features: FeatureModel, tenant_id: str):
billing_info = BillingService.get_info(tenant_id)
@ -209,8 +215,8 @@ class FeatureService:
if "productId" in license_info:
features.license.product_id = license_info["productId"]
if "availableTeamMembers" in license_info:
features.license.available_team_members = license_info["availableTeamMembers"]
# if "availableTeamMembers" in license_info:
# features.license.available_team_members = license_info["availableTeamMembers"]
if "availableWorkspaces" in license_info:
features.license.available_workspaces = license_info["availableWorkspaces"]