func RemoteScopes()

in backend/plugins/tapd/api/remote.go [63:142]


func RemoteScopes(input *plugin.ApiResourceInput) (*plugin.ApiResourceOutput, errors.Error) {
	return remoteHelper.GetScopesFromRemote(input,
		func(basicRes context2.BasicRes, gid string, queryData *api.RemoteQueryData, connection models.TapdConnection) ([]api.BaseRemoteGroupResponse, errors.Error) {
			if gid == "" {
				// if gid is empty, it means we need to query company
				gid = "1"
			}
			apiClient, err := api.NewApiClientFromConnection(context.TODO(), basicRes, &connection)
			if err != nil {
				return nil, errors.BadInput.Wrap(err, "failed to get create apiClient")
			}
			var res *http.Response
			query := url.Values{}
			query.Set("company_id", queryData.CustomInfo)
			res, err = apiClient.Get("/workspaces/projects", query, nil)
			if err != nil {
				return nil, err
			}

			var resBody models.WorkspacesResponse
			err = api.UnmarshalResponse(res, &resBody)
			if err != nil {
				return nil, err
			}
			if resBody.Status != 1 {
				return nil, errors.BadInput.Wrap(err, "failed to get workspaces")
			}

			// check if workspace is a group
			isGroupMap := map[uint64]bool{}
			for _, workspace := range resBody.Data {
				isGroupMap[workspace.ApiTapdWorkspace.ParentId] = true
			}

			groups := []api.BaseRemoteGroupResponse{}
			for _, workspace := range resBody.Data {
				if fmt.Sprintf(`%d`, workspace.ApiTapdWorkspace.ParentId) == gid &&
					isGroupMap[workspace.ApiTapdWorkspace.Id] {
					groups = append(groups, api.BaseRemoteGroupResponse{
						Id:   fmt.Sprintf(`%d`, workspace.ApiTapdWorkspace.Id),
						Name: workspace.ApiTapdWorkspace.Name,
					})
				}
			}

			return groups, err
		},
		func(basicRes context2.BasicRes, gid string, queryData *api.RemoteQueryData, connection models.TapdConnection) ([]models.TapdWorkspace, errors.Error) {
			if gid == "" {
				return nil, nil
			}

			apiClient, err := api.NewApiClientFromConnection(context.TODO(), basicRes, &connection)
			if err != nil {
				return nil, errors.BadInput.Wrap(err, "failed to get create apiClient")
			}
			var res *http.Response
			query := url.Values{}
			query.Set("company_id", queryData.CustomInfo)
			res, err = apiClient.Get("/workspaces/projects", query, nil)
			if err != nil {
				return nil, err
			}
			var resBody models.WorkspacesResponse
			err = api.UnmarshalResponse(res, &resBody)
			if err != nil {
				return nil, err
			}
			workspaces := []models.TapdWorkspace{}
			for _, workspace := range resBody.Data {
				if fmt.Sprintf(`%d`, workspace.ApiTapdWorkspace.ParentId) == gid {
					// filter from all project to query what we need...
					workspaces = append(workspaces, models.TapdWorkspace(workspace.ApiTapdWorkspace))
				}

			}
			return workspaces, err
		},
	)
}