(ctx context.Context, kctx *kong.Context, flags *RootFlags, mutation docsBodyMutation)
| 93 | } |
| 94 | |
| 95 | func runDocsBodyMutation(ctx context.Context, kctx *kong.Context, flags *RootFlags, mutation docsBodyMutation) error { |
| 96 | docID := normalizeGoogleID(strings.TrimSpace(mutation.docID)) |
| 97 | if docID == "" { |
| 98 | return usage("empty docId") |
| 99 | } |
| 100 | placement, err := mutation.placement.plan(kctx) |
| 101 | if err != nil { |
| 102 | return err |
| 103 | } |
| 104 | payload := mutation.placement.dryRunPayload(placement) |
| 105 | payload["documentId"] = docID |
| 106 | payload["batch"] = mutation.batch |
| 107 | for key, value := range mutation.payload { |
| 108 | payload[key] = value |
| 109 | } |
| 110 | if dryRunErr := dryRunExit(ctx, flags, mutation.action, payload); dryRunErr != nil { |
| 111 | return dryRunErr |
| 112 | } |
| 113 | if batchErr := validateDocsBatchTarget(ctx, flags, mutation.batch, docID); batchErr != nil { |
| 114 | return batchErr |
| 115 | } |
| 116 | |
| 117 | svc, err := requireDocsService(ctx, flags) |
| 118 | if err != nil { |
| 119 | return err |
| 120 | } |
| 121 | batchRevision, err := captureDocsBatchRevision(ctx, svc, mutation.batch, docID) |
| 122 | if err != nil { |
| 123 | return err |
| 124 | } |
| 125 | resolved, err := resolveDocsPlacement(ctx, svc, docID, mutation.placement.Tab, placement) |
| 126 | if err != nil { |
| 127 | return err |
| 128 | } |
| 129 | if resolved.InTable { |
| 130 | return usage(fmt.Sprintf("%s cannot target text inside a table", mutation.action)) |
| 131 | } |
| 132 | requests, err := mutation.build(resolved) |
| 133 | if err != nil { |
| 134 | return err |
| 135 | } |
| 136 | applyDocsRequestTarget(requests, docsTargetFromPlacement(resolved.ResolvedPlacement)) |
| 137 | if queued, queueErr := queueDocsBatchRequests(ctx, flags, mutation.batch, docID, mutation.action, batchRevision, requests, false); queued || queueErr != nil { |
| 138 | return queueErr |
| 139 | } |
| 140 | response, err := svc.Documents.BatchUpdate(docID, &docs.BatchUpdateDocumentRequest{ |
| 141 | Requests: requests, |
| 142 | WriteControl: docsRequiredRevisionWriteControl(resolved.RequiredRevisionID), |
| 143 | }).Context(ctx).Do() |
| 144 | if err != nil { |
| 145 | return fmt.Errorf("%s: %w", mutation.action, err) |
| 146 | } |
| 147 | return writeDocsBodyMutationResult(ctx, response, resolved, len(requests), mutation.payload) |
| 148 | } |
| 149 | |
| 150 | func writeDocsBodyMutationResult(ctx context.Context, response *docs.BatchUpdateDocumentResponse, resolved docsResolvedPlacement, requestCount int, payload map[string]any) error { |
| 151 | documentID := "" |
no test coverage detected