| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- package plane_v2
- import (
- "fmt"
- "go.uber.org/zap"
- )
- // ==================== Member API ====================
- // Member 角色常量
- const (
- RoleAdmin = 20
- RoleMember = 15
- RoleGuest = 5
- )
- // ListWorkspaceMembers 列出工作空间成员
- func ListWorkspaceMembers(slug string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/members/", slug)
- resp, err := planeWebGet(url)
- if err != nil {
- zap.L().Error("[PlaneWeb] ListWorkspaceMembers 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] ListWorkspaceMembers 返回错误", zap.String("status", resp.Status))
- return nil, fmt.Errorf("ListWorkspaceMembers 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // GetWorkspaceMember 获取工作空间成员详情
- func GetWorkspaceMember(slug, memberID string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/members/%s/", slug, memberID)
- resp, err := planeWebGet(url)
- if err != nil {
- zap.L().Error("[PlaneWeb] GetWorkspaceMember 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] GetWorkspaceMember 返回错误", zap.String("status", resp.Status))
- return nil, fmt.Errorf("GetWorkspaceMember 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // UpdateWorkspaceMemberRole 更新工作空间成员角色
- func UpdateWorkspaceMemberRole(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 := planeWebPatch(url, payload)
- if err != nil {
- zap.L().Error("[PlaneWeb] UpdateWorkspaceMemberRole 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] UpdateWorkspaceMemberRole 返回错误",
- zap.String("status", resp.Status),
- zap.String("body", string(resp.Body)),
- )
- return nil, fmt.Errorf("UpdateWorkspaceMemberRole 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // RemoveWorkspaceMember 移除工作空间成员
- func RemoveWorkspaceMember(slug, memberID string) error {
- url := fmt.Sprintf("/api/workspaces/%s/members/%s/", slug, memberID)
- resp, err := planeWebDelete(url)
- if err != nil {
- zap.L().Error("[PlaneWeb] RemoveWorkspaceMember 请求失败", zap.Error(err))
- return err
- }
- if resp.StatusCode != 204 {
- zap.L().Error("[PlaneWeb] RemoveWorkspaceMember 返回错误", zap.String("status", resp.Status))
- return fmt.Errorf("RemoveWorkspaceMember 失败: %s", resp.Status)
- }
- return nil
- }
- // ListProjectMembers 列出项目成员
- func ListProjectMembers(slug, projectID string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/", slug, projectID)
- resp, err := planeWebGet(url)
- if err != nil {
- zap.L().Error("[PlaneWeb] ListProjectMembers 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] ListProjectMembers 返回错误", zap.String("status", resp.Status))
- return nil, fmt.Errorf("ListProjectMembers 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // AddProjectMember 添加项目成员
- func AddProjectMember(slug, projectID, memberID string, role int) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/", slug, projectID)
- payload := map[string]interface{}{
- "members": []map[string]interface{}{
- {"member_id": memberID, "role": role},
- },
- }
- resp, err := planeWebPost(url, payload)
- if err != nil {
- zap.L().Error("[PlaneWeb] AddProjectMember 请求失败", zap.Error(err))
- return nil, err
- }
- if resp.StatusCode != 201 {
- zap.L().Error("[PlaneWeb] AddProjectMember 返回错误",
- zap.String("status", resp.Status),
- zap.String("body", string(resp.Body)),
- )
- return nil, fmt.Errorf("AddProjectMember 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // GetProjectMember 获取项目成员详情
- func GetProjectMember(slug, projectID, memberID string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/%s/", slug, projectID, memberID)
- resp, err := planeWebGet(url)
- if err != nil {
- zap.L().Error("[PlaneWeb] GetProjectMember 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] GetProjectMember 返回错误", zap.String("status", resp.Status))
- return nil, fmt.Errorf("GetProjectMember 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // UpdateProjectMemberRole 更新项目成员角色
- func UpdateProjectMemberRole(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 := planeWebPatch(url, payload)
- if err != nil {
- zap.L().Error("[PlaneWeb] UpdateProjectMemberRole 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] UpdateProjectMemberRole 返回错误",
- zap.String("status", resp.Status),
- zap.String("body", string(resp.Body)),
- )
- return nil, fmt.Errorf("UpdateProjectMemberRole 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // RemoveProjectMember 移除项目成员
- func RemoveProjectMember(slug, projectID, memberID string) error {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/members/%s/", slug, projectID, memberID)
- resp, err := planeWebDelete(url)
- if err != nil {
- zap.L().Error("[PlaneWeb] RemoveProjectMember 请求失败", zap.Error(err))
- return err
- }
- if resp.StatusCode != 204 {
- zap.L().Error("[PlaneWeb] RemoveProjectMember 返回错误", zap.String("status", resp.Status))
- return fmt.Errorf("RemoveProjectMember 失败: %s", resp.Status)
- }
- return nil
- }
- // GetCurrentUser 获取当前用户信息
- func GetCurrentUser() ([]byte, error) {
- resp, err := planeWebGet("/api/users/me/")
- if err != nil {
- zap.L().Error("[PlaneWeb] GetCurrentUser 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] GetCurrentUser 返回错误", zap.String("status", resp.Status))
- return nil, fmt.Errorf("GetCurrentUser 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // UpdateCurrentUser 更新当前用户信息
- func UpdateCurrentUser(data map[string]interface{}) ([]byte, error) {
- resp, err := planeWebPatch("/api/users/me/", data)
- if err != nil {
- zap.L().Error("[PlaneWeb] UpdateCurrentUser 请求失败", zap.Error(err))
- return nil, err
- }
- if !isWebSuccess(resp.StatusCode) {
- zap.L().Error("[PlaneWeb] UpdateCurrentUser 返回错误",
- zap.String("status", resp.Status),
- zap.String("body", string(resp.Body)),
- )
- return nil, fmt.Errorf("UpdateCurrentUser 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // ListCurrentWorkspaceMembers 列出当前工作空间的成员
- func ListCurrentWorkspaceMembers() ([]byte, error) {
- return ListWorkspaceMembers(webWorkspaceSlug)
- }
- // ListCurrentProjectMembers 列出当前项目的成员
- func ListCurrentProjectMembers() ([]byte, error) {
- return ListProjectMembers(webWorkspaceSlug, webProjectId)
- }
|