{
  "schemaVersion": 1,
  "scope": {
    "prefix": "x_snc_duri",
    "name": "Demo Users REST Import",
    "create": true,
    "description": "Import public demo users from the demo source into a scoped table."
  },
  "updateSet": "Demo Users REST Import",
  "steps": [
    {
      "id": "target_table",
      "skill": "table",
      "op": "create_table",
      "inputs": {
        "name": "x_snc_duri_user",
        "label": "Demo User",
        "sysScope": "$scope",
        "schema": [
          {
            "column": "external_id",
            "label": "External ID",
            "internalType": "string",
            "mandatory": true
          },
          {
            "column": "name",
            "label": "Name",
            "internalType": "string"
          },
          {
            "column": "username",
            "label": "Username",
            "internalType": "string"
          },
          {
            "column": "email",
            "label": "Email",
            "internalType": "string"
          },
          {
            "column": "phone",
            "label": "Phone",
            "internalType": "string"
          },
          {
            "column": "website",
            "label": "Website",
            "internalType": "string"
          },
          {
            "column": "company_name",
            "label": "Company",
            "internalType": "string"
          }
        ]
      }
    },
    {
      "id": "staging_table",
      "skill": "table",
      "op": "create_table",
      "inputs": {
        "name": "x_snc_duri_user_import",
        "label": "Demo User Import",
        "superClass": "sys_import_set_row",
        "sysScope": "$scope",
        "schema": []
      }
    },
    {
      "id": "rest_msg",
      "skill": "rest-message",
      "op": "create",
      "inputs": {
        "name": "Demo Source REST",
        "endpoint": "https://api.example.com",
        "description": "Public demo users JSON wrapped as {users:[...]}",
        "sysScope": "$scope",
        "methods": [
          {
            "name": "Get Users",
            "httpMethod": "GET",
            "path": "/demo/users",
            "headers": {
              "Accept": "application/json"
            },
            "parameters": {
              "wrap": "users"
            }
          }
        ]
      }
    },
    {
      "id": "alias",
      "skill": "connection-alias",
      "op": "create",
      "inputs": {
        "name": "Demo Source REST",
        "connectionUrl": "https://api.example.com",
        "sysScope": "$scope"
      }
    },
    {
      "id": "dsr_action",
      "skill": "flow-action",
      "op": "create_datasource_action",
      "inputs": {
        "name": "Import Demo Users REST",
        "internalName": "import_demo_users_rest",
        "description": "DSR pull of https://api.example.com/demo/users?wrap=users",
        "restMessageFunction": "$rest_msg",
        "connectionAlias": "$alias",
        "resourcePath": "/demo/users",
        "httpMethod": "get",
        "headers": {
          "Accept": "application/json"
        },
        "queryParams": {
          "wrap": "users"
        },
        "sysScope": "$scope"
      }
    },
    {
      "id": "data_source",
      "skill": "import-set",
      "op": "create_data_source",
      "inputs": {
        "name": "Demo Users REST Feed",
        "importSetTableName": "x_snc_duri_user_import",
        "format": "JSON",
        "type": "REST",
        "jpathRootNode": "/users/users",
        "expandNodeChildren": true,
        "sysScope": "$scope"
      }
    },
    {
      "id": "attach_dsr",
      "skill": "flow-action",
      "op": "attach_datasource",
      "inputs": {
        "dataSourceName": "Demo Users REST Feed",
        "actionId": "$dsr_action",
        "actionType": "datasource_request",
        "sysScope": "$scope"
      }
    },
    {
      "id": "transform_map",
      "skill": "import-set",
      "op": "create_transform_map",
      "inputs": {
        "name": "Demo Users REST to User",
        "sourceTable": "x_snc_duri_user_import",
        "targetTable": "x_snc_duri_user",
        "sysScope": "$scope"
      }
    },
    {
      "id": "field_external_id",
      "skill": "import-set",
      "op": "add_field_map",
      "inputs": {
        "transformMap": "$transform_map",
        "sourceField": "u_id",
        "targetField": "external_id",
        "coalesce": true,
        "useSourceScript": true,
        "sourceScript": "answer = (function transformEntry(source) {\n    var v = source.u_id;\n    if (v) {\n        return String(v);\n    }\n    v = source.id;\n    return v ? String(v) : '';\n})(source);",
        "sysScope": "$scope"
      }
    },
    {
      "id": "field_name",
      "skill": "import-set",
      "op": "add_field_map",
      "inputs": {
        "transformMap": "$transform_map",
        "sourceField": "u_name",
        "targetField": "name",
        "sysScope": "$scope"
      }
    },
    {
      "id": "field_username",
      "skill": "import-set",
      "op": "add_field_map",
      "inputs": {
        "transformMap": "$transform_map",
        "sourceField": "u_username",
        "targetField": "username",
        "sysScope": "$scope"
      }
    },
    {
      "id": "field_email",
      "skill": "import-set",
      "op": "add_field_map",
      "inputs": {
        "transformMap": "$transform_map",
        "sourceField": "u_email",
        "targetField": "email",
        "sysScope": "$scope"
      }
    },
    {
      "id": "field_phone",
      "skill": "import-set",
      "op": "add_field_map",
      "inputs": {
        "transformMap": "$transform_map",
        "sourceField": "u_phone",
        "targetField": "phone",
        "sysScope": "$scope"
      }
    },
    {
      "id": "field_website",
      "skill": "import-set",
      "op": "add_field_map",
      "inputs": {
        "transformMap": "$transform_map",
        "sourceField": "u_website",
        "targetField": "website",
        "sysScope": "$scope"
      }
    },
    {
      "id": "field_company",
      "skill": "import-set",
      "op": "add_field_map",
      "inputs": {
        "transformMap": "$transform_map",
        "sourceField": "u_company_name",
        "targetField": "company_name",
        "useSourceScript": true,
        "sourceScript": "answer = (function transformEntry(source) {\n    if (source.u_company_name) {\n        return source.u_company_name;\n    }\n    if (source.company_name) {\n        return source.company_name;\n    }\n    var c = source.u_company || source.company;\n    if (c && c.name) {\n        return c.name;\n    }\n    try {\n        var parsed = JSON.parse(c);\n        if (parsed && parsed.name) {\n            return parsed.name;\n        }\n    } catch (e) {}\n    return '';\n})(source);",
        "sysScope": "$scope"
      }
    },
    {
      "id": "scheduled_import",
      "skill": "import-set",
      "op": "create_scheduled_import",
      "inputs": {
        "name": "Demo Users REST On Demand",
        "dataSource": "$data_source",
        "runType": "on_demand",
        "active": true,
        "sysScope": "$scope"
      }
    },
    {
      "id": "run_import",
      "skill": "import-set",
      "op": "run_scheduled_import",
      "inputs": {
        "scheduledImport": "$scheduled_import",
        "timeoutSeconds": 180,
        "sysScope": "$scope"
      }
    }
  ],
  "test": {
    "structural": true
  }
}
