From ace07073949209a7e02eeaf042a5cfbdb178c60c Mon Sep 17 00:00:00 2001 From: Zhi Date: Thu, 12 Mar 2026 12:00:37 +0000 Subject: [PATCH] fix: member/milestone endpoints - role_id column, schema fixes --- app/api/routers/projects.py | 33 ++++++++++++++++++++++++++++++--- app/schemas/schemas.py | 7 +++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/api/routers/projects.py b/app/api/routers/projects.py index 5585c21..5c8a039 100644 --- a/app/api/routers/projects.py +++ b/app/api/routers/projects.py @@ -252,16 +252,43 @@ def add_project_member( ).first() if existing: raise HTTPException(status_code=400, detail="User already a member") - db_member = models.ProjectMember(project_id=project_id, user_id=member.user_id, role=member.role) + # Convert role name to role_id + role = db.query(Role).filter(Role.name == member.role).first() + role_id = role.id if role else None + db_member = models.ProjectMember(project_id=project_id, user_id=member.user_id, role_id=role_id) db.add(db_member) db.commit() db.refresh(db_member) - return db_member + role_name = "developer" + if db_member.role_id: + role = db.query(Role).filter(Role.id == db_member.role_id).first() + if role: + role_name = role.name + return { + "id": db_member.id, + "user_id": db_member.user_id, + "project_id": db_member.project_id, + "role": role_name + } @router.get("/{project_id}/members", response_model=List[schemas.ProjectMemberResponse]) def list_project_members(project_id: int, db: Session = Depends(get_db)): - return db.query(models.ProjectMember).filter(models.ProjectMember.project_id == project_id).all() + members = db.query(models.ProjectMember).filter(models.ProjectMember.project_id == project_id).all() + result = [] + for m in members: + role_name = "developer" + if m.role_id: + role = db.query(Role).filter(Role.id == m.role_id).first() + if role: + role_name = role.name + result.append({ + "id": m.id, + "user_id": m.user_id, + "project_id": m.project_id, + "role": role_name + }) + return result @router.delete("/{project_id}/members/{user_id}", status_code=status.HTTP_204_NO_CONTENT) diff --git a/app/schemas/schemas.py b/app/schemas/schemas.py index 307b438..12020ce 100644 --- a/app/schemas/schemas.py +++ b/app/schemas/schemas.py @@ -190,8 +190,11 @@ class ProjectMemberCreate(ProjectMemberBase): pass -class ProjectMemberResponse(ProjectMemberBase): +class ProjectMemberResponse(BaseModel): id: int + user_id: int + project_id: int + role: str = "dev" class Config: from_attributes = True @@ -205,7 +208,7 @@ class MilestoneBase(BaseModel): class MilestoneCreate(MilestoneBase): - project_id: int + pass class MilestoneUpdate(BaseModel):