diff --git a/api/apps/__init___fastapi.py b/api/apps/__init___fastapi.py index 2668905..a26b9f2 100644 --- a/api/apps/__init___fastapi.py +++ b/api/apps/__init___fastapi.py @@ -127,6 +127,7 @@ def setup_routes(app: FastAPI): from api.apps.file_app import router as file_router from api.apps.file2document_app import router as file2document_router from api.apps.mcp_server_app import router as mcp_router + from api.apps.tenant_app import router as tenant_router app.include_router(user_router, prefix=f"/{API_VERSION}/user", tags=["User"]) app.include_router(kb_router, prefix=f"/{API_VERSION}/kb", tags=["KB"]) @@ -134,6 +135,7 @@ def setup_routes(app: FastAPI): app.include_router(file_router, prefix=f"/{API_VERSION}/file", tags=["File"]) app.include_router(file2document_router, prefix=f"/{API_VERSION}/file2document", tags=["File2Document"]) app.include_router(mcp_router, prefix=f"/{API_VERSION}/mcp", tags=["MCP"]) + app.include_router(tenant_router, prefix=f"/{API_VERSION}/tenant", tags=["Tenant"]) def get_current_user_from_token(authorization: str): """从token获取当前用户""" diff --git a/api/apps/tenant_app.py b/api/apps/tenant_app.py index 63c7f74..d7ffb70 100644 --- a/api/apps/tenant_app.py +++ b/api/apps/tenant_app.py @@ -14,8 +14,9 @@ # limitations under the License. # -from flask import request -from flask_login import login_required, current_user +from fastapi import APIRouter, Depends, HTTPException, Query, status +from api.models.tenant_models import InviteUserRequest, UserTenantResponse +from api.utils.api_utils import get_current_user from api import settings from api.apps import smtp_mail_server @@ -24,13 +25,18 @@ from api.db.db_models import UserTenant from api.db.services.user_service import UserTenantService, UserService from api.utils import get_uuid, delta_seconds -from api.utils.api_utils import get_json_result, validate_request, server_error_response, get_data_error_result +from api.utils.api_utils import get_json_result, server_error_response, get_data_error_result from api.utils.web_utils import send_invite_email +# 创建 FastAPI 路由器 +router = APIRouter() -@manager.route("//user/list", methods=["GET"]) # noqa: F821 -@login_required -def user_list(tenant_id): + +@router.get("/{tenant_id}/user/list") +async def user_list( + tenant_id: str, + current_user = Depends(get_current_user) +): if current_user.id != tenant_id: return get_json_result( data=False, @@ -46,18 +52,19 @@ def user_list(tenant_id): return server_error_response(e) -@manager.route('//user', methods=['POST']) # noqa: F821 -@login_required -@validate_request("email") -def create(tenant_id): +@router.post('/{tenant_id}/user') +async def create( + tenant_id: str, + request: InviteUserRequest, + current_user = Depends(get_current_user) +): if current_user.id != tenant_id: return get_json_result( data=False, message='No authorization.', code=settings.RetCode.AUTHENTICATION_ERROR) - req = request.json - invite_user_email = req["email"] + invite_user_email = request.email invite_users = UserService.query(email=invite_user_email) if not invite_users: return get_data_error_result(message="User not found.") @@ -100,9 +107,12 @@ def create(tenant_id): return get_json_result(data=usr) -@manager.route('//user/', methods=['DELETE']) # noqa: F821 -@login_required -def rm(tenant_id, user_id): +@router.delete('/{tenant_id}/user/{user_id}') +async def rm( + tenant_id: str, + user_id: str, + current_user = Depends(get_current_user) +): if current_user.id != tenant_id and current_user.id != user_id: return get_json_result( data=False, @@ -116,9 +126,10 @@ def rm(tenant_id, user_id): return server_error_response(e) -@manager.route("/list", methods=["GET"]) # noqa: F821 -@login_required -def tenant_list(): +@router.get("/list") +async def tenant_list( + current_user = Depends(get_current_user) +): try: users = UserTenantService.get_tenants_by_user_id(current_user.id) for u in users: @@ -128,9 +139,11 @@ def tenant_list(): return server_error_response(e) -@manager.route("/agree/", methods=["PUT"]) # noqa: F821 -@login_required -def agree(tenant_id): +@router.put("/agree/{tenant_id}") +async def agree( + tenant_id: str, + current_user = Depends(get_current_user) +): try: UserTenantService.filter_update([UserTenant.tenant_id == tenant_id, UserTenant.user_id == current_user.id], {"role": UserTenantRole.NORMAL}) return get_json_result(data=True)