{
  "meta": {
    "$_POST": [
      {
        "type": "text",
        "name": "title"
      },
      {
        "type": "text",
        "name": "description"
      },
      {
        "type": "text",
        "name": "category"
      },
      {
        "type": "text",
        "name": "priority"
      },
      {
        "type": "date",
        "name": "due_date"
      },
      {
        "type": "text",
        "name": "repeat"
      },
      {
        "type": "number",
        "name": "custom_every"
      },
      {
        "type": "text",
        "name": "custom_unit"
      },
      {
        "type": "date",
        "name": "end_date"
      },
      {
        "type": "number",
        "name": "never_ends"
      },
      {
        "type": "number",
        "name": "is_financial"
      },
      {
        "type": "number",
        "name": "required_amount"
      },
      {
        "type": "number",
        "name": "saved_amount"
      }
    ]
  },
  "exec": {
    "steps": [
      {
        "name": "",
        "module": "auth",
        "action": "restrict",
        "options": {
          "provider": "security",
          "permissions": [
            "Active"
          ]
        }
      },
      {
        "name": "insert_todo",
        "module": "dbupdater",
        "action": "insert",
        "options": {
          "connection": "db",
          "sql": {
            "type": "insert",
            "values": [
              {
                "table": "todos",
                "column": "title",
                "type": "text",
                "value": "{{$_POST.title}}"
              },
              {
                "table": "todos",
                "column": "description",
                "type": "text",
                "value": "{{$_POST.description}}"
              },
              {
                "table": "todos",
                "column": "category",
                "type": "text",
                "value": "{{$_POST.category.default('Personal')}}"
              },
              {
                "table": "todos",
                "column": "priority",
                "type": "text",
                "value": "{{$_POST.priority.default('Medium')}}"
              },
              {
                "table": "todos",
                "column": "due_date",
                "type": "date",
                "value": "{{$_POST.due_date}}"
              },
              {
                "table": "todos",
                "column": "section",
                "type": "text",
                "value": "active"
              },
              {
                "table": "todos",
                "column": "is_financial",
                "type": "number",
                "value": "{{$_POST.is_financial ? 1 : 0}}"
              },
              {
                "table": "todos",
                "column": "is_recurring",
                "type": "number",
                "value": "{{($_POST.repeat && $_POST.repeat != 'None') ? 1 : 0}}"
              }
            ],
            "table": "todos",
            "returning": "id",
            "query": "insert into `todos` (`title`, `description`, `category`, `priority`, `due_date`, `section`, `is_financial`, `is_recurring`) values (?, ?, ?, ?, ?, 'active', ?, ?)",
            "params": [
              {
                "name": ":P1",
                "type": "expression",
                "value": "{{$_POST.title}}"
              },
              {
                "name": ":P2",
                "type": "expression",
                "value": "{{$_POST.description}}"
              },
              {
                "name": ":P3",
                "type": "expression",
                "value": "{{$_POST.category.default('Personal')}}"
              },
              {
                "name": ":P4",
                "type": "expression",
                "value": "{{$_POST.priority.default('Medium')}}"
              },
              {
                "name": ":P5",
                "type": "expression",
                "value": "{{$_POST.due_date}}"
              },
              {
                "name": ":P6",
                "type": "expression",
                "value": "{{$_POST.is_financial ? 1 : 0}}"
              },
              {
                "name": ":P7",
                "type": "expression",
                "value": "{{($_POST.repeat && $_POST.repeat != 'None') ? 1 : 0}}"
              }
            ]
          }
        },
        "meta": [
          {
            "name": "identity",
            "type": "text"
          },
          {
            "name": "affected",
            "type": "number"
          }
        ]
      },
      {
        "name": "",
        "module": "core",
        "action": "condition",
        "options": {
          "if": "{{$_POST.repeat && $_POST.repeat != 'None'}}",
          "then": {
            "steps": [
              {
                "name": "insert_recurrence",
                "module": "dbupdater",
                "action": "insert",
                "options": {
                  "connection": "db",
                  "sql": {
                    "type": "insert",
                    "values": [
                      {
                        "table": "todo_recurrence",
                        "column": "todo_id",
                        "type": "number",
                        "value": "{{insert_todo.identity}}"
                      },
                      {
                        "table": "todo_recurrence",
                        "column": "repeat_type",
                        "type": "text",
                        "value": "{{$_POST.repeat}}"
                      },
                      {
                        "table": "todo_recurrence",
                        "column": "custom_every",
                        "type": "number",
                        "value": "{{$_POST.repeat == 'Custom' ? $_POST.custom_every : null}}"
                      },
                      {
                        "table": "todo_recurrence",
                        "column": "custom_unit",
                        "type": "text",
                        "value": "{{$_POST.repeat == 'Custom' ? $_POST.custom_unit : null}}"
                      },
                      {
                        "table": "todo_recurrence",
                        "column": "end_date",
                        "type": "date",
                        "value": "{{$_POST.end_date}}"
                      },
                      {
                        "table": "todo_recurrence",
                        "column": "never_ends",
                        "type": "number",
                        "value": "{{$_POST.never_ends ? 1 : 0}}"
                      },
                      {
                        "table": "todo_recurrence",
                        "column": "next_due_date",
                        "type": "date",
                        "value": "{{$_POST.due_date}}"
                      }
                    ],
                    "table": "todo_recurrence",
                    "returning": "id",
                    "query": "insert into `todo_recurrence` (`todo_id`, `repeat_type`, `custom_every`, `custom_unit`, `end_date`, `never_ends`, `next_due_date`) values (?, ?, ?, ?, ?, ?, ?)",
                    "params": [
                      {
                        "name": ":P1",
                        "type": "expression",
                        "value": "{{insert_todo.identity}}"
                      },
                      {
                        "name": ":P2",
                        "type": "expression",
                        "value": "{{$_POST.repeat}}"
                      },
                      {
                        "name": ":P3",
                        "type": "expression",
                        "value": "{{$_POST.repeat == 'Custom' ? $_POST.custom_every : null}}"
                      },
                      {
                        "name": ":P4",
                        "type": "expression",
                        "value": "{{$_POST.repeat == 'Custom' ? $_POST.custom_unit : null}}"
                      },
                      {
                        "name": ":P5",
                        "type": "expression",
                        "value": "{{$_POST.end_date}}"
                      },
                      {
                        "name": ":P6",
                        "type": "expression",
                        "value": "{{$_POST.never_ends ? 1 : 0}}"
                      },
                      {
                        "name": ":P7",
                        "type": "expression",
                        "value": "{{$_POST.due_date}}"
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      },
      {
        "name": "",
        "module": "core",
        "action": "condition",
        "options": {
          "if": "{{$_POST.is_financial}}",
          "then": {
            "steps": [
              {
                "name": "insert_financial",
                "module": "dbupdater",
                "action": "insert",
                "options": {
                  "connection": "db",
                  "sql": {
                    "type": "insert",
                    "values": [
                      {
                        "table": "todo_financial",
                        "column": "todo_id",
                        "type": "number",
                        "value": "{{insert_todo.identity}}"
                      },
                      {
                        "table": "todo_financial",
                        "column": "required_amount",
                        "type": "number",
                        "value": "{{$_POST.required_amount}}"
                      },
                      {
                        "table": "todo_financial",
                        "column": "saved_amount",
                        "type": "number",
                        "value": "{{$_POST.saved_amount}}"
                      }
                    ],
                    "table": "todo_financial",
                    "returning": "id",
                    "query": "insert into `todo_financial` (`todo_id`, `required_amount`, `saved_amount`) values (?, ?, ?)",
                    "params": [
                      {
                        "name": ":P1",
                        "type": "expression",
                        "value": "{{insert_todo.identity}}"
                      },
                      {
                        "name": ":P2",
                        "type": "expression",
                        "value": "{{$_POST.required_amount}}"
                      },
                      {
                        "name": ":P3",
                        "type": "expression",
                        "value": "{{$_POST.saved_amount}}"
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      }
    ]
  }
}