(ctx context.Context, cli *cli, screenTagMap map[string][]interface{}, debugPrefix string)
| 576 | } |
| 577 | |
| 578 | func applyPromptRenderings(ctx context.Context, cli *cli, screenTagMap map[string][]interface{}, debugPrefix string) error { |
| 579 | var updates []*management.PromptRendering |
| 580 | for screen, headTags := range screenTagMap { |
| 581 | p := management.PromptType(ScreenPromptMap[screen]) |
| 582 | s := management.ScreenName(screen) |
| 583 | updates = append(updates, &management.PromptRendering{ |
| 584 | Prompt: &p, |
| 585 | Screen: &s, |
| 586 | RenderingMode: &management.RenderingModeAdvanced, |
| 587 | HeadTags: headTags, |
| 588 | }) |
| 589 | } |
| 590 | |
| 591 | if len(updates) == 0 { |
| 592 | return fmt.Errorf("no renderings to apply") |
| 593 | } |
| 594 | |
| 595 | // Snapshot originals. |
| 596 | existing, err := cli.api.Prompt.ListRendering(ctx) |
| 597 | if err != nil { |
| 598 | return fmt.Errorf("failed to fetch current renderings: %w", err) |
| 599 | } |
| 600 | |
| 601 | promptRenderingMap := make(map[string]*management.PromptRendering, len(existing.PromptRenderings)) |
| 602 | for _, r := range existing.PromptRenderings { |
| 603 | if r.Prompt != nil && r.Screen != nil { |
| 604 | promptRenderingMap[string(*r.Prompt)+"|"+string(*r.Screen)] = r |
| 605 | } |
| 606 | } |
| 607 | |
| 608 | originals := make([]*management.PromptRendering, len(updates)) |
| 609 | for i, u := range updates { |
| 610 | originals[i] = promptRenderingMap[string(*u.Prompt)+"|"+string(*u.Screen)] |
| 611 | } |
| 612 | |
| 613 | const maxBatch = 20 |
| 614 | doBatchedPatch := func(list []*management.PromptRendering) error { |
| 615 | return cli.api.Prompt.BulkUpdateRendering(ctx, |
| 616 | &management.PromptRenderingBulkUpdate{PromptRenderings: list}) |
| 617 | } |
| 618 | |
| 619 | // --- Batching loop with rollback awareness ---. |
| 620 | for i := 0; i < len(updates); i += maxBatch { |
| 621 | end := i + maxBatch |
| 622 | if end > len(updates) { |
| 623 | end = len(updates) |
| 624 | } |
| 625 | |
| 626 | if err := doBatchedPatch(updates[i:end]); err != nil { |
| 627 | if debugPrefix == "Restoring" { |
| 628 | return fmt.Errorf("restore failed: %w", err) |
| 629 | } |
| 630 | |
| 631 | if cli.debug { |
| 632 | cli.renderer.Errorf("%s batch %d-%d failed: %v", debugPrefix, i+1, end, err) |
| 633 | cli.renderer.Infof("%s rollback starting for screens 1-%d...", debugPrefix, i) |
| 634 | } else { |
| 635 | // Removed the redundant log: cli.renderer.Errorf("patch failed; rolling back..."). |
no test coverage detected