MCPcopy Index your code
hub / github.com/coder/coder / convertTasks

Method convertTasks

coderd/aitasks.go:446–503  ·  view source on GitHub ↗

convertTasks converts database tasks to API tasks, enriching them with workspace information.

(ctx context.Context, requesterID uuid.UUID, dbTasks []database.Task)

Source from the content-addressed store, hash-verified

444// convertTasks converts database tasks to API tasks, enriching them with
445// workspace information.
446func (api *API) convertTasks(ctx context.Context, requesterID uuid.UUID, dbTasks []database.Task) ([]codersdk.Task, error) {
447 if len(dbTasks) == 0 {
448 return []codersdk.Task{}, nil
449 }
450
451 // Prepare to batch fetch workspaces.
452 workspaceIDs := make([]uuid.UUID, 0, len(dbTasks))
453 for _, task := range dbTasks {
454 if !task.WorkspaceID.Valid {
455 return nil, xerrors.New("task has no workspace ID")
456 }
457 workspaceIDs = append(workspaceIDs, task.WorkspaceID.UUID)
458 }
459
460 // Fetch workspaces for tasks that have workspaces.
461 workspaceRows, err := api.Database.GetWorkspaces(ctx, database.GetWorkspacesParams{
462 WorkspaceIds: workspaceIDs,
463 })
464 if err != nil {
465 return nil, xerrors.Errorf("fetch workspaces: %w", err)
466 }
467
468 workspaces, err := database.ConvertWorkspaceRows(workspaceRows)
469 if err != nil {
470 return nil, xerrors.Errorf("convert workspace rows: %w", err)
471 }
472
473 // Gather associated data and convert to API workspaces.
474 data, err := api.workspaceData(ctx, workspaces)
475 if err != nil {
476 return nil, xerrors.Errorf("fetch workspace data: %w", err)
477 }
478
479 apiWorkspaces, err := convertWorkspaces(
480 ctx,
481 api.Logger,
482 requesterID,
483 workspaces,
484 data,
485 )
486 if err != nil {
487 return nil, xerrors.Errorf("convert workspaces: %w", err)
488 }
489
490 workspacesByID := make(map[uuid.UUID]codersdk.Workspace)
491 for _, ws := range apiWorkspaces {
492 workspacesByID[ws.ID] = ws
493 }
494
495 // Convert tasks to SDK format.
496 result := make([]codersdk.Task, 0, len(dbTasks))
497 for _, dbTask := range dbTasks {
498 task := taskFromDBTaskAndWorkspace(dbTask, workspacesByID[dbTask.WorkspaceID.UUID])
499 result = append(result, task)
500 }
501
502 return result, nil
503}

Callers 1

tasksListMethod · 0.95

Calls 7

workspaceDataMethod · 0.95
ConvertWorkspaceRowsFunction · 0.92
convertWorkspacesFunction · 0.85
NewMethod · 0.65
GetWorkspacesMethod · 0.65
ErrorfMethod · 0.45

Tested by

no test coverage detected