修了些项目管理的bug,完成了不带权限验证的列举所有租户

This commit is contained in:
MiLla 2024-11-20 18:31:35 +08:00
parent 0594809a48
commit 31b74e8fff
2 changed files with 98 additions and 7 deletions

View File

@ -43,8 +43,8 @@ async def create_project(data: dict, session: SessionDep):
raise HTTPException(status_code=400, detail="Need more name/requirement/start_time/deadline") raise HTTPException(status_code=400, detail="Need more name/requirement/start_time/deadline")
# 验证开始时间是否早于结束时间 # 验证开始时间是否早于结束时间
start_time = datetime.strptime(start_time_str, "%Y-%m-%d") start_time = datetime.strptime(start_time_str, "%Y-%m-%dT%H:%M:%S")
deadline = datetime.strptime(deadline_str, "%Y-%m-%d") deadline = datetime.strptime(deadline_str, "%Y-%m-%dT%H:%M:%S")
if start_time > deadline: if start_time > deadline:
raise HTTPException(status_code=400, detail="Start time must be before deadline") raise HTTPException(status_code=400, detail="Start time must be before deadline")
@ -82,7 +82,7 @@ async def create_project(data: dict, session: SessionDep):
requirement=requirement, requirement=requirement,
start_time=start_time, start_time=start_time,
deadline=deadline, deadline=deadline,
owner_id=1 # 假设owner_id是1 owner_id=1 # 假设owner_id是1之后应该是通过token获取owner_id吧
) )
session.add(project) session.add(project)

View File

@ -20,11 +20,102 @@ router = APIRouter()
# return "hello" # return "hello"
# 列举所有租户 # 列举所有租户
from fastapi import HTTPException, Response
from sqlalchemy.orm import Session
from models import Tenant, User # 假设你已导入 Tenant 和 User 模型
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):
tenant = session.query(Tenant).filter().all() tenants = session.query(Tenant).all() # 获取所有租户
if not tenant: if not tenants:
raise HTTPException(status_code=404, detail="Tenant not found") raise HTTPException(status_code=404, detail="No tenants found")
return {"tenant": tenant}
tenant_data = []
for tenant in tenants:
# 获取该租户中 role=1 的第一个用户(如果存在)
tenant_user = next((user for user in tenant.users if user.role == 1), None)
# 获取该租户中除了 role=1 以外的用户数量
user_num = len([user for user in tenant.users if user.role != 1])
# 构建租户信息
tenant_info = {
"name": tenant.name,
"username": tenant_user.username if tenant_user else None, # 如果找到 role=1 的用户,返回其 username
"user_num": user_num # 除去 role=1 的用户数量
}
tenant_data.append(tenant_info)
return {"tenants": tenant_data}
# 新增和修改租户 # 新增和修改租户
@router.post("/api/s1/tenant")
async def create_tenant(data: dict, session: SessionDep):
tenant_id = data.get("tenant_id")
name = data["name"]
username = data["username"]
password = data["password"]
# 验证是否缺少必要参数
if not name:
raise HTTPException(status_code=400, detail="Need to provide name")
# 更新租户还是新增租户
if tenant_id:
# 查找现有租户
tenant = session.get(Tenant, tenant_id)
if not tenant:
raise HTTPException(status_code=404, detail="Tenant not found")
# 更新项目内容
tenant.name = name
else:
# 新增项目
project = Project(
name=name,
requirement=requirement,
start_time=start_time,
deadline=deadline,
owner_id=1 # 假设owner_id是1之后应该是通过token获取owner_id吧
)
session.add(project)
# 处理项目和用户的关联
# 先清除现有的关联
# 生成删除语句并执行
print(project_id) #测试用
stmt = delete(ProjectUserLink).where(ProjectUserLink.project_id == project.id)
session.execute(stmt)
session.commit() # 提交事务
# 重新建立与评估员和审核员的关系
for username in estimators:
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.refresh(project)
return {"message": "Added or updated successfully",
"information": project,
}