完成了租户管理的所有功能,暂时去除了权限管理以测试代码

This commit is contained in:
MiLla 2024-11-20 19:24:23 +08:00
parent 31b74e8fff
commit dfe85ce565

View File

@ -6,6 +6,7 @@ from fastapi import HTTPException, Response, Depends, APIRouter
from typing import Optional, Annotated from typing import Optional, Annotated
from datetime import datetime, timedelta from datetime import datetime, timedelta
from jose import JWTError, jwt from jose import JWTError, jwt
from sqlalchemy import delete
from sqlmodel import select from sqlmodel import select
@ -14,25 +15,12 @@ from dependencies import *
router = APIRouter() router = APIRouter()
# 推送修改用注释
# @router.get(...)
# def example():
# return "hello"
# 列举所有租户
from fastapi import HTTPException, Response from fastapi import HTTPException, Response
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from models import Tenant, User # 假设你已导入 Tenant 和 User 模型 from models import Tenant, User # 假设你已导入 Tenant 和 User 模型
from dependencies import SessionDep # 假设 SessionDep 是数据库会话的依赖 from dependencies import SessionDep # 假设 SessionDep 是数据库会话的依赖
#列举所有租户 #列举所有租户
from fastapi import HTTPException, Response
from sqlalchemy.orm import Session
from models import Tenant, User # 假设你已导入 Tenant 和 User 模型
from dependencies import SessionDep # 假设 SessionDep 是数据库会话的依赖
@router.get("/api/s1/tenant") @router.get("/api/s1/tenant")
async def get_tenant(response: Response, session: SessionDep): async def get_tenant(response: Response, session: SessionDep):
tenants = session.query(Tenant).all() # 获取所有租户 tenants = session.query(Tenant).all() # 获取所有租户
@ -60,62 +48,95 @@ async def get_tenant(response: Response, session: SessionDep):
# 新增和修改租户 # 新增和修改租户
@router.post("/api/s1/tenant") @router.post("/api/s1/tenant")
async def create_tenant(data: dict, session: SessionDep): async def create_or_update_tenant(data: dict, session: SessionDep):
tenant_id = data.get("tenant_id")
name = data["name"] name = data["name"]
username = data["username"] username = data["username"]
password = data["password"] password = data.get("password", "") # 默认为空字符串
# 验证是否缺少必要参数 # 验证是否缺少必要参数
if not name: if not name or not username:
raise HTTPException(status_code=400, detail="Need to provide name") raise HTTPException(status_code=400, detail="Need more name/username")
# 查找用户
user_query = select(User).where(User.username == username)
existing_user = session.exec(user_query).first()
# 更新租户还是新增租户 # 如果密码为空,更新租户信息
if tenant_id: if password == "":
# 查找现有租户 print("密码为空") #测试用
tenant = session.get(Tenant, tenant_id) # 如果用户不存在,返回错误
if not tenant: if not existing_user:
raise HTTPException(status_code=404, detail="Tenant not found") raise HTTPException(status_code=404, detail="User not found")
else:
# 更新项目内容 # 如果找到了对应的 User
tenant.name = name # 使用 user.tenant_id 查找对应的 Tenant
tenant = session.get(Tenant, existing_user.tenant_id)
# 如果 Tenant 存在,更新 Tenant 的 name 字段
if tenant:
tenant.name = name
session.commit() # 提交更新
else:
raise HTTPException(status_code=404, detail="Tenant not found")
return {"message": "Tenant and User update successfully"}
else: else:
# 新增项目 print("密码不为空") #测试用
project = Project( # 如果密码不为空,执行创建新租户和用户的操作
if existing_user:
# 如果用户已存在,返回错误
raise HTTPException(status_code=409, detail="User already exists")
# 检查租户是否已存在
tenant_query = select(Tenant).where(Tenant.name == name)
existing_tenant = session.exec(tenant_query).first()
if existing_tenant:
raise HTTPException(status_code=409, detail="Tenant name already exists")
# 创建新租户
tenant = Tenant(
name=name, name=name,
requirement=requirement, username=username,
start_time=start_time, password=password, # 实际使用时应加密密码
deadline=deadline,
owner_id=1 # 假设owner_id是1之后应该是通过token获取owner_id吧
) )
session.add(project) session.add(tenant)
session.commit()
session.refresh(tenant)
# 处理项目和用户的关联 # 创建新用户
# 先清除现有的关联 user = User(
# 生成删除语句并执行 username=username,
print(project_id) #测试用 password=password, # 同样需要加密密码
stmt = delete(ProjectUserLink).where(ProjectUserLink.project_id == project.id) role=1, # 默认role为1
tenant_id = tenant.id,
)
session.add(user)
# 提交事务
session.commit()
session.refresh(tenant)
return {"message": "Tenant and User added successfully"}
#删除租户
@router.delete("/api/s1/tenant")
async def delete_tenant(data: dict, session: SessionDep):
tenant_name = data.get("name")
if not tenant_name:
raise HTTPException(status_code=400, detail="Tenant name is required")
# 查找租户
tenant = session.exec(
select(Tenant).where(Tenant.name == tenant_name)).first()
if not tenant:
raise HTTPException(status_code=404, detail="Tenant not found")
# 删除与租户相关的用户
stmt = delete(User).where(User.tenant_id == tenant.id)
session.execute(stmt) session.execute(stmt)
session.commit() # 提交事务
# 重新建立与评估员和审核员的关系 # 删除租户
for username in estimators: session.delete(tenant)
user = next((user for user in users_estimators if user.username == username), None)
if user:
project_user_link = ProjectUserLink(project_id=project.id, user_id=user.id)
session.add(project_user_link)
for username in auditors:
user = next((user for user in users_auditors if user.username == username), None)
if user:
project_user_link = ProjectUserLink(project_id=project.id, user_id=user.id)
session.add(project_user_link)
# 提交事务
session.commit() session.commit()
session.refresh(project)
return {"message": "Added or updated successfully", return {"detail": "Tenant deleted successfully"}
"information": project,
}