From 9a85f83569f93c91e60ddf92848e7c1ea97b69dd Mon Sep 17 00:00:00 2001 From: Wang Baoling Date: Mon, 2 Sep 2024 12:08:16 +0800 Subject: [PATCH] feat: add api of tenant app (#2177) ### What problem does this PR solve? add api of tenant app ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- api/apps/tenant_app.py | 39 +++++++++++++++++++++++++++++++++ api/db/services/user_service.py | 21 ++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 api/apps/tenant_app.py diff --git a/api/apps/tenant_app.py b/api/apps/tenant_app.py new file mode 100644 index 00000000000..3199071710e --- /dev/null +++ b/api/apps/tenant_app.py @@ -0,0 +1,39 @@ +# +# Copyright 2024 The InfiniFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from flask_login import current_user, login_required + +from api.utils.api_utils import server_error_response +from api.db.services.user_service import TenantService, UserTenantService +from api.utils.api_utils import get_json_result + + +@manager.route("/list", methods=["GET"]) +@login_required +def tenant_list(): + try: + tenants = TenantService.get_by_user_id(current_user.id) + return get_json_result(data=tenants) + except Exception as e: + return server_error_response(e) + +@manager.route("//user/list", methods=["GET"]) +@login_required +def user_list(tenant_id): + try: + users = UserTenantService.get_by_tenant_id(tenant_id) + return get_json_result(data=users) + except Exception as e: + return server_error_response(e) diff --git a/api/db/services/user_service.py b/api/db/services/user_service.py index 07e20d47a3e..0c0a297c458 100644 --- a/api/db/services/user_service.py +++ b/api/db/services/user_service.py @@ -137,3 +137,24 @@ def save(cls, **kwargs): kwargs["id"] = get_uuid() obj = cls.model(**kwargs).save(force_insert=True) return obj + + @classmethod + @DB.connection_context() + def get_by_tenant_id(cls, tenant_id): + fields = [ + cls.model.user_id, + cls.model.tenant_id, + cls.model.role, + cls.model.status, + User.nickname, + User.email, + User.avatar, + User.is_authenticated, + User.is_active, + User.is_anonymous, + User.status, + User.is_superuser] + return list(cls.model.select(*fields) + .join(User, on=((cls.model.user_id == User.id) & (cls.model.status == StatusEnum.VALID.value))) + .where(cls.model.tenant_id == tenant_id) + .dicts()) \ No newline at end of file