diff --git a/packages/events/algolia.cfc b/packages/events/algolia.cfc index 959da30..278c2f1 100644 --- a/packages/events/algolia.cfc +++ b/packages/events/algolia.cfc @@ -2,7 +2,6 @@ - @@ -26,9 +25,14 @@ - + - + + + + + + @@ -40,8 +44,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/forms/configAlgolia.cfc b/packages/forms/configAlgolia.cfc index 41f4623..6d35b43 100644 --- a/packages/forms/configAlgolia.cfc +++ b/packages/forms/configAlgolia.cfc @@ -27,7 +27,7 @@ component extends="farcry.core.packages.forms.forms" key="algolia" displayName=" FROM #arguments.typename# GROUP BY datetimeLastUpdated HAVING count(*) > 1 - ", { }, { datasource=application.dsn_read }).recordcount gt 1; + ", { }, { datasource=application.dsn_read }).recordcount gt 0; } public void function disambiguateTimestamps(required string typename) { diff --git a/packages/lib/algolia.cfc b/packages/lib/algolia.cfc index 462a040..9bec500 100644 --- a/packages/lib/algolia.cfc +++ b/packages/lib/algolia.cfc @@ -663,10 +663,21 @@ component { (not structKeyExists(oContent, "isIndexable") and isIndexable(indexName=indexname, stObject=stObject)) ) ) { - strOut.append('{ "action": "addObject", "indexName": "#indexName#", "body": '); - processObject(indexName, strOut, arguments.stObject); - strOut.append(' }, '); - builtToDate = arguments.stObject.datetimeLastUpdated; + + if (StructKeyExists(arguments.stObject, 'status') AND arguments.stObject['status'] != 'approved') { + // remove draft record + // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft + strOut.append('{ "action": "deleteObject", "indexName": "#indexName#", "body": '); + strOut.append('{ "objectID": "'); + strOut.append(arguments.stObject.objectid); + strOut.append('" } }, '); + builtToDate = now(); + } else { + strOut.append('{ "action": "addObject", "indexName": "#indexName#", "body": '); + processObject(indexName, strOut, arguments.stObject); + strOut.append(' }, '); + builtToDate = arguments.stObject.datetimeLastUpdated; + } } else if (arguments.operation eq "deleted") { strOut.append('{ "action": "deleteObject", "indexName": "#indexName#", "body": '); @@ -731,15 +742,25 @@ component { for (row in qContent) { for (indexName in indexableTypes[qContent.typename]) { if (qContent.operation eq "updated") { + stContent = oContent.getData(objectid=qContent.objectid); if ( (structKeyExists(oContent, "isIndexable") and oContent.isIndexable(indexName=indexname, stObject=stContent)) or (not structKeyExists(oContent, "isIndexable") and isIndexable(indexName=indexname, stObject=stContent)) ) { - strOut.append('{ "action": "addObject", "indexName":"#indexName#", "body": '); - processObject(indexName, strOut, stContent); - strOut.append(' }, '); + if (StructKeyExists(stContent, 'status') AND stContent['status'] != 'approved') { + // remove draft record + // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft + strOut.append('{ "action": "deleteObject", "indexName":"#indexName#", "body": '); + strOut.append('{ "objectID": "'); + strOut.append(qContent.objectid); + strOut.append('" } }, '); + } else { + strOut.append('{ "action": "addObject", "indexName":"#indexName#", "body": '); + processObject(indexName, strOut, stContent); + strOut.append(' }, '); + } } } else if (qContent.operation eq "deleted") { @@ -748,7 +769,7 @@ component { strOut.append(qContent.objectid); strOut.append('" } }, '); } - } + } //indexName if ( strOut.length() * ((qContent.currentrow+1) / qContent.currentrow) gt arguments.requestSize or @@ -758,10 +779,11 @@ component { count = qContent.currentrow; break; } - } + } // row + processingTime += getTickCount() - start; - strOut.delete(strOut.length()-2, strOut.length()); + if (right(strOut, 2) == ', ') strOut.delete(strOut.length()-2, strOut.length()); strOut.append(' ] }'); if (count) {