Thanks Patrick.
Here is the response when using the revised app.zip
{"status":"500","message":"obj is not defined","stack":"ReferenceError: obj is not defined\n at formatRecord (/opt/node_app/lib/core/app.js:352:60)\n at Object.options.postProcessResponse (/opt/node_app/lib/core/app.js:392:24)\n at Client_MySQL2.postProcessResponse (/opt/node_app/node_modules/knex/lib/client.js:164:26)\n at /opt/node_app/node_modules/knex/lib/execution/runner.js:135:51\n at processTicksAndRejections (node:internal/process/task_queues:96:5)\n at async Runner.ensureConnection (/opt/node_app/node_modules/knex/lib/execution/runner.js:300:14)\n at async Runner.run (/opt/node_app/node_modules/knex/lib/execution/runner.js:30:19)\n at async App._exec (/opt/node_app/lib/core/app.js:599:30)\n at async App._exec (/opt/node_app/lib/core/app.js:566:17)\n at async App.exec (/opt/node_app/lib/core/app.js:535:9)"}
And here is the action json:
{
"name": "qry_message_thread",
"module": "dbconnector",
"action": "single",
"options": {
"connection": "db",
"sql": {
"type": "SELECT",
"columns": [
{
"table": "message_threads",
"column": "message_thread_id"
},
{
"table": "message_threads",
"column": "creator_user_id"
},
{
"table": "message_threads",
"column": "thread_name"
},
{
"table": "message_threads",
"column": "created_at"
},
{
"table": "message_threads",
"column": "thread_type"
}
],
"params": [
{
"operator": "equal",
"type": "expression",
"name": ":P1",
"value": "{{$_GET.message_thread_id}}",
"test": ""
},
{
"operator": "equal",
"type": "expression",
"name": ":P2",
"value": "{{identity}}",
"test": ""
}
],
"table": {
"name": "message_threads"
},
"primary": "message_thread_id",
"joins": [
{
"table": "message_thread_users",
"column": "*",
"type": "INNER",
"clauses": {
"condition": "AND",
"rules": [
{
"table": "message_thread_users",
"column": "message_thread_id",
"operator": "equal",
"value": {
"table": "message_threads",
"column": "message_thread_id"
},
"operation": "="
}
]
},
"primary": "message_thread_user_id"
}
],
"sub": {
"messages": {
"type": "SELECT",
"table": {
"name": "messages",
"alias": "messages"
},
"key": "message_thread_id",
"columns": [
{
"table": "messages",
"column": "message_id"
},
{
"table": "messages",
"column": "created_at"
},
{
"table": "messages",
"column": "modified_at"
},
{
"table": "messages",
"column": "creator_user_id"
},
{
"table": "messages",
"column": "message_text"
},
{
"table": "message_creators",
"column": "first_name"
},
{
"table": "message_creators",
"column": "last_name"
},
{
"table": "message_creators",
"column": "avatar"
},
{
"table": "messages",
"column": "message_type"
},
{
"table": "message_creators",
"column": "full_name"
}
],
"params": [],
"primary": "message_id",
"joins": [
{
"table": "users",
"column": "*",
"alias": "message_creators",
"type": "INNER",
"clauses": {
"condition": "AND",
"rules": [
{
"table": "message_creators",
"column": "user_id",
"operator": "equal",
"value": {
"table": "messages",
"column": "creator_user_id"
},
"operation": "="
}
]
},
"primary": "user_id"
}
],
"query": "SELECT messages.message_id, messages.created_at, messages.modified_at, messages.creator_user_id, messages.message_text, message_creators.first_name, message_creators.last_name, message_creators.avatar, messages.message_type, message_creators.full_name\nFROM messages AS messages\nINNER JOIN users AS message_creators ON message_creators.user_id = messages.creator_user_id"
},
"members": {
"type": "SELECT",
"table": {
"name": "message_thread_users",
"alias": "users"
},
"key": "message_thread_id",
"columns": [
{
"table": "users",
"column": "message_thread_user_id"
},
{
"table": "users",
"column": "created_at"
},
{
"table": "users",
"column": "modified_at"
},
{
"table": "users",
"column": "user_id"
},
{
"table": "users",
"column": "role"
},
{
"table": "member_users",
"column": "first_name"
},
{
"table": "member_users",
"column": "last_name"
},
{
"table": "member_users",
"column": "avatar"
},
{
"table": "member_users",
"column": "full_name"
}
],
"params": [],
"primary": "message_thread_user_id",
"joins": [
{
"table": "users",
"column": "*",
"alias": "member_users",
"type": "INNER",
"clauses": {
"condition": "AND",
"rules": [
{
"table": "member_users",
"column": "user_id",
"operator": "equal",
"value": {
"table": "users",
"column": "user_id"
},
"operation": "="
}
]
},
"primary": "user_id"
}
],
"query": "SELECT users.message_thread_user_id, users.created_at, users.modified_at, users.user_id, users.role, member_users.first_name, member_users.last_name, member_users.avatar, member_users.full_name\nFROM message_thread_users AS users\nINNER JOIN users AS member_users ON member_users.user_id = users.user_id\nWHERE users.status = 'active'\nORDER BY users.role ASC, member_users.last_name ASC",
"wheres": {
"condition": "AND",
"rules": [
{
"id": "users.status",
"field": "users.status",
"type": "string",
"operator": "equal",
"value": "active",
"data": {
"table": "users",
"column": "status",
"type": "text",
"columnObj": {
"type": "enum",
"enumValues": [
"active",
"removed_self"
],
"default": "'active'",
"maxLength": 12,
"primary": false,
"nullable": true,
"name": "status"
}
},
"operation": "="
}
],
"conditional": null,
"valid": true
},
"orders": [
{
"table": "users",
"column": "role",
"direction": "ASC",
"recid": 1
},
{
"table": "member_users",
"column": "last_name",
"direction": "ASC",
"recid": 2
}
]
}
},
"wheres": {
"condition": "AND",
"rules": [
{
"id": "message_threads.message_thread_id",
"field": "message_threads.message_thread_id",
"type": "double",
"operator": "equal",
"value": "{{$_GET.message_thread_id}}",
"data": {
"table": "message_threads",
"column": "message_thread_id",
"type": "number",
"columnObj": {
"type": "increments",
"primary": true,
"nullable": false,
"name": "message_thread_id"
}
},
"operation": "="
},
{
"id": "message_thread_users.user_id",
"field": "message_thread_users.user_id",
"type": "double",
"operator": "equal",
"value": "{{identity}}",
"data": {
"table": "message_thread_users",
"column": "user_id",
"type": "number",
"columnObj": {
"type": "reference",
"primary": false,
"nullable": false,
"references": "user_id",
"inTable": "users",
"referenceType": "integer",
"onUpdate": "NO ACTION",
"onDelete": "NO ACTION",
"name": "user_id"
}
},
"operation": "="
}
],
"conditional": null,
"valid": true
},
"query": "SELECT message_threads.message_thread_id, message_threads.creator_user_id, message_threads.thread_name, message_threads.created_at, message_threads.thread_type\nFROM message_threads\nINNER JOIN message_thread_users ON message_thread_users.message_thread_id = message_threads.message_thread_id\nWHERE message_threads.message_thread_id = :P1 /* {{$_GET.message_thread_id}} */ AND message_thread_users.user_id = :P2 /* {{identity}} */"
}
},
"meta": [
{
"name": "members",
"type": "array",
"sub": [
{
"type": "text",
"name": "first_name"
},
{
"type": "text",
"name": "last_name"
}
]
},
{
"name": "messages",
"type": "array",
"sub": [
{
"type": "text",
"name": "first_name"
},
{
"type": "text",
"name": "last_name"
}
]
}
],
"outputType": "object",
"type": "dbconnector_single",
"output": true
}