package plane_v2_api import ( "fmt" plane "fwh-toolbox-server/repositories/api/plane_v2" ) // ListWorkspaceMembers 列出工作空间成员 func ListWorkspaceMembers(c *plane.PlaneClient, slug string) ([]byte, error) { url := fmt.Sprintf("/api/workspaces/%s/members/", slug) resp, err := c.Get(url) if err != nil { return nil, err } if !plane.IsSuccess(resp.StatusCode) { return nil, fmt.Errorf("ListWorkspaceMembers 失败: %s", resp.Status) } return resp.Body, nil } // GetWorkspaceMember 获取工作空间成员详情 func GetWorkspaceMember(c *plane.PlaneClient, slug, memberID string) ([]byte, error) { url := fmt.Sprintf("/api/workspaces/%s/members/%s/", slug, memberID) resp, err := c.Get(url) if err != nil { return nil, err } if !plane.IsSuccess(resp.StatusCode) { return nil, fmt.Errorf("GetWorkspaceMember 失败: %s", resp.Status) } return resp.Body, nil } // UpdateWorkspaceMemberRole 更新工作空间成员角色 func UpdateWorkspaceMemberRole(c *plane.PlaneClient, slug, memberID string, role int) ([]byte, error) { url := fmt.Sprintf("/api/workspaces/%s/members/%s/", slug, memberID) payload := map[string]interface{}{ "role": role, } resp, err := c.Patch(url, payload) if err != nil { return nil, err } if !plane.IsSuccess(resp.StatusCode) { return nil, fmt.Errorf("UpdateWorkspaceMemberRole 失败: %s, body=%s", resp.Status, string(resp.Body)) } return resp.Body, nil } // RemoveWorkspaceMember 移除工作空间成员 func RemoveWorkspaceMember(c *plane.PlaneClient, slug, memberID string) error { url := fmt.Sprintf("/api/workspaces/%s/members/%s/", slug, memberID) resp, err := c.Delete(url) if err != nil { return err } if resp.StatusCode != 204 { return fmt.Errorf("RemoveWorkspaceMember 失败: %s", resp.Status) } return nil } // ListProjectMembers 列出项目成员 func ListProjectMembers(c *plane.PlaneClient, slug, projectID string) ([]byte, error) { url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/", slug, projectID) resp, err := c.Get(url) if err != nil { return nil, err } if !plane.IsSuccess(resp.StatusCode) { return nil, fmt.Errorf("ListProjectMembers 失败: %s", resp.Status) } return resp.Body, nil } // AddProjectMember 添加项目成员 func AddProjectMember(c *plane.PlaneClient, slug, projectID, memberID string, role int) ([]byte, error) { url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/", slug, projectID) payload := map[string]interface{}{ "member": memberID, "role": role, } resp, err := c.Post(url, payload) if err != nil { return nil, err } if !plane.IsSuccess(resp.StatusCode) { return nil, fmt.Errorf("AddProjectMember 失败: %s, body=%s", resp.Status, string(resp.Body)) } return resp.Body, nil } // GetProjectMember 获取项目成员详情 func GetProjectMember(c *plane.PlaneClient, slug, projectID, memberID string) ([]byte, error) { url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/%s/", slug, projectID, memberID) resp, err := c.Get(url) if err != nil { return nil, err } if !plane.IsSuccess(resp.StatusCode) { return nil, fmt.Errorf("GetProjectMember 失败: %s", resp.Status) } return resp.Body, nil } // UpdateProjectMemberRole 更新项目成员角色 func UpdateProjectMemberRole(c *plane.PlaneClient, slug, projectID, memberID string, role int) ([]byte, error) { url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/%s/", slug, projectID, memberID) payload := map[string]interface{}{ "role": role, } resp, err := c.Patch(url, payload) if err != nil { return nil, err } if !plane.IsSuccess(resp.StatusCode) { return nil, fmt.Errorf("UpdateProjectMemberRole 失败: %s, body=%s", resp.Status, string(resp.Body)) } return resp.Body, nil } // RemoveProjectMember 移除项目成员 func RemoveProjectMember(c *plane.PlaneClient, slug, projectID, memberID string) error { url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/%s/", slug, projectID, memberID) resp, err := c.Delete(url) if err != nil { return err } if resp.StatusCode != 204 { return fmt.Errorf("RemoveProjectMember 失败: %s", resp.Status) } return nil }