MCPcopy Create free account
hub / github.com/compozy/agh / FanOutTaskRuns

Method FanOutTaskRuns

internal/api/core/tasks.go:1369–1430  ·  view source on GitHub ↗

FanOutTaskRuns creates designated sibling runs for one task.

(c *gin.Context)

Source from the content-addressed store, hash-verified

1367
1368// FanOutTaskRuns creates designated sibling runs for one task.
1369func (h *BaseHandlers) FanOutTaskRuns(c *gin.Context) {
1370 manager, ok := h.requireTaskManager(c)
1371 if !ok {
1372 return
1373 }
1374 networkStore, err := h.networkStoreRequired()
1375 if err != nil {
1376 h.respondError(c, http.StatusInternalServerError, err)
1377 return
1378 }
1379 taskID, err := requiredPathID(c.Param("id"), "task id")
1380 if err != nil {
1381 h.respondError(c, StatusForTaskError(err), err)
1382 return
1383 }
1384 var req contract.FanOutTaskRunsRequest
1385 if err := c.ShouldBindJSON(&req); err != nil {
1386 h.respondError(
1387 c,
1388 http.StatusBadRequest,
1389 NewTaskValidationError(fmt.Errorf("%s: decode fan-out task runs request: %w", h.transportName(), err)),
1390 )
1391 return
1392 }
1393 maxDesignations := h.Config.Task.Orchestration.DesignatedRunMax
1394 if maxDesignations <= 0 {
1395 maxDesignations = aghconfig.DefaultTaskDesignatedRunMax
1396 }
1397 prepared, err := prepareFanOutTaskRunsRequest(req, maxDesignations)
1398 if err != nil {
1399 h.respondError(c, StatusForTaskError(err), err)
1400 return
1401 }
1402 actor, err := h.taskActorContext(c, taskActionFanOutRuns)
1403 if err != nil {
1404 h.respondError(c, StatusForTaskError(err), err)
1405 return
1406 }
1407 groupID := store.NewID("tdg")
1408 runs, err := enqueueFanOutTaskRuns(c.Request.Context(), manager, actor, taskID, groupID, req, prepared)
1409 if err != nil {
1410 h.respondError(c, StatusForTaskError(err), err)
1411 return
1412 }
1413 now := h.nowUTC()
1414 if err := networkStore.PutTaskDesignationRollup(
1415 c.Request.Context(),
1416 store.TaskDesignationRollup{
1417 DesignationGroupID: groupID,
1418 TaskID: taskID,
1419 SummaryJSON: fanOutDesignationRollupJSON(runs, now),
1420 CreatedAt: now,
1421 },
1422 ); err != nil {
1423 h.respondError(c, StatusForNetworkError(err), err)
1424 return
1425 }
1426 c.JSON(http.StatusCreated, contract.FanOutTaskRunsResponse{

Callers

nothing calls this directly

Calls 15

requireTaskManagerMethod · 0.95
networkStoreRequiredMethod · 0.95
respondErrorMethod · 0.95
transportNameMethod · 0.95
taskActorContextMethod · 0.95
nowUTCMethod · 0.95
NewIDFunction · 0.92
requiredPathIDFunction · 0.85
StatusForTaskErrorFunction · 0.85
NewTaskValidationErrorFunction · 0.85
enqueueFanOutTaskRunsFunction · 0.85

Tested by

no test coverage detected