{
  "slug": "taskiq-worker-middleware-flow",
  "version": 1,
  "project": "taskiq",
  "title": "Taskiq worker middleware and result storage",
  "description": "Worker processing runs pre_execute, task execution, optional on_error and post_execute. Result storage precedes post_save, which runs only after successful storage. NoResultError skips storage.",
  "config": {
    "design": "flowchart-top-down-diamonds-side-branches",
    "name": "worker-middleware-flow",
    "style": "clean",
    "palette": [
      "#3066aa"
    ],
    "parameters": {
      "nodes": [
        {
          "id": "pre",
          "label": "pre_execute",
          "kind": "start"
        },
        {
          "id": "call",
          "label": "Run task and close dependencies",
          "kind": "process"
        },
        {
          "id": "error",
          "label": "Execution error?",
          "kind": "decision"
        },
        {
          "id": "on-error",
          "label": "on_error",
          "kind": "process"
        },
        {
          "id": "post",
          "label": "post_execute",
          "kind": "process"
        },
        {
          "id": "no-result",
          "label": "NoResultError?",
          "kind": "decision"
        },
        {
          "id": "save",
          "label": "Save result in backend",
          "kind": "process"
        },
        {
          "id": "saved",
          "label": "Save succeeded?",
          "kind": "decision"
        },
        {
          "id": "post-save",
          "label": "post_save",
          "kind": "end"
        },
        {
          "id": "skip",
          "label": "Skip storage and post_save",
          "kind": "end"
        },
        {
          "id": "fail",
          "label": "Handle save error; no post_save",
          "kind": "end"
        }
      ],
      "edges": [
        {
          "from": "pre",
          "to": "call"
        },
        {
          "from": "call",
          "to": "error"
        },
        {
          "from": "error",
          "to": "post",
          "label": "No"
        },
        {
          "from": "error",
          "to": "on-error",
          "label": "Yes"
        },
        {
          "from": "on-error",
          "to": "post"
        },
        {
          "from": "post",
          "to": "no-result"
        },
        {
          "from": "no-result",
          "to": "save",
          "label": "No"
        },
        {
          "from": "no-result",
          "to": "skip",
          "label": "Yes"
        },
        {
          "from": "save",
          "to": "saved"
        },
        {
          "from": "saved",
          "to": "post-save",
          "label": "Yes"
        },
        {
          "from": "saved",
          "to": "fail",
          "label": "No"
        }
      ]
    },
    "accessibility": {
      "title": "Taskiq worker middleware and result storage",
      "description": "Worker processing runs pre_execute, task execution, optional on_error and post_execute. Result storage precedes post_save, which runs only after successful storage. NoResultError skips storage."
    }
  },
  "files": {
    "svg": {
      "url": "/diagram-sources/taskiq-worker-middleware-flow/v1/diagram.svg",
      "sha256": "2d5076f34eb6c22293b7b9bafcdfafb8a043013803d1d85a9f114f76996a1cf0"
    },
    "png": {
      "url": "/diagram-sources/taskiq-worker-middleware-flow/v1/diagram.png",
      "sha256": "9a3118401e4f9477b768865c21c52e57757276b73753ad0314d8ea0c8abb009a"
    }
  }
}
