(ctx context.Context, spaceID, parentNodeToken string)
| 284 | } |
| 285 | |
| 286 | func listWikiNodeChildren(ctx context.Context, spaceID, parentNodeToken string) ([]wikiNodeInfo, *clie2e.Result, error) { |
| 287 | var children []wikiNodeInfo |
| 288 | pageToken := "" |
| 289 | seenPageTokens := map[string]struct{}{} |
| 290 | for { |
| 291 | params := map[string]any{ |
| 292 | "page_size": 50, |
| 293 | "parent_node_token": parentNodeToken, |
| 294 | } |
| 295 | if pageToken != "" { |
| 296 | if _, exists := seenPageTokens[pageToken]; exists { |
| 297 | return children, nil, fmt.Errorf("wiki children pagination loop detected for parent %s page_token %q", parentNodeToken, pageToken) |
| 298 | } |
| 299 | seenPageTokens[pageToken] = struct{}{} |
| 300 | params["page_token"] = pageToken |
| 301 | } |
| 302 | |
| 303 | result, err := clie2e.RunCmdWithRetry(ctx, clie2e.Request{ |
| 304 | Args: []string{"api", "get", "/open-apis/wiki/v2/spaces/" + spaceID + "/nodes"}, |
| 305 | DefaultAs: "bot", |
| 306 | Params: params, |
| 307 | }, clie2e.RetryOptions{}) |
| 308 | if err != nil || result == nil || result.ExitCode != 0 { |
| 309 | return children, result, err |
| 310 | } |
| 311 | if !wikiAPISuccess(result.Stdout) { |
| 312 | return children, result, fmt.Errorf("list wiki node children for parent %s failed: stdout=%s stderr=%s", parentNodeToken, result.Stdout, result.Stderr) |
| 313 | } |
| 314 | |
| 315 | parsed := gjson.Parse(result.Stdout) |
| 316 | for _, item := range parsed.Get("data.items").Array() { |
| 317 | nodeToken := item.Get("node_token").String() |
| 318 | if nodeToken == "" { |
| 319 | continue |
| 320 | } |
| 321 | objType := item.Get("obj_type").String() |
| 322 | if objType == "" { |
| 323 | objType = "docx" |
| 324 | } |
| 325 | children = append(children, wikiNodeInfo{NodeToken: nodeToken, ObjType: objType}) |
| 326 | } |
| 327 | |
| 328 | pageToken = parsed.Get("data.page_token").String() |
| 329 | if pageToken == "" || !parsed.Get("data.has_more").Bool() { |
| 330 | return children, result, nil |
| 331 | } |
| 332 | } |
| 333 | } |
| 334 | |
| 335 | func waitWikiNodeDeleted(ctx context.Context, nodeToken string) error { |
| 336 | deadline := time.NewTimer(20 * time.Second) |
no test coverage detected