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
},
)
}