From a804667ab60e357fcf9c8b06abf820ee12d8a4a7 Mon Sep 17 00:00:00 2001 From: Andrew Mercer Date: Wed, 21 Aug 2019 15:50:52 +1000 Subject: [PATCH 1/7] only send approved objects to Algolia index if changed object no longer approved, remove from Algolia index --- packages/events/algolia.cfc | 30 +++++++++++++++++++++++++++--- packages/lib/algolia.cfc | 20 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) 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/lib/algolia.cfc b/packages/lib/algolia.cfc index d919d4b..d7f9e65 100644 --- a/packages/lib/algolia.cfc +++ b/packages/lib/algolia.cfc @@ -663,6 +663,16 @@ component { (not structKeyExists(oContent, "isIndexable") and isIndexable(indexName=indexname, stObject=stObject)) ) ) { + + // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft + if (StructKeyExists(arguments.stObject, 'status') AND arguments.stObject['status'] != 'approved') { + stResult["typename"] = arguments.stObject.typename; + stResult["count"] = 0; + stResult["builtToDate"] = builtToDate; + + return stResult; + } + strOut.append('{ "action": "addObject", "indexName": "#indexName#", "body": '); processObject(indexName, strOut, arguments.stObject); strOut.append(' }, '); @@ -731,6 +741,16 @@ component { for (row in qContent) { for (indexName in indexableTypes[qContent.typename]) { if (qContent.operation eq "updated") { + + // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft + if (StructKeyExists(arguments.stObject, 'status') AND arguments.stObject['status'] != 'approved') { + stResult["typename"] = arguments.stObject.typename; + stResult["count"] = 0; + stResult["builtToDate"] = builtToDate; + + return stResult; + } + stContent = oContent.getData(objectid=qContent.objectid); if ( From e04b5d7be5b2051cd4cb539d33403bcda256f389 Mon Sep 17 00:00:00 2001 From: Andrew Mercer Date: Wed, 21 Aug 2019 17:51:18 +1000 Subject: [PATCH 2/7] fix status check when in loop --- packages/lib/algolia.cfc | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/lib/algolia.cfc b/packages/lib/algolia.cfc index d7f9e65..ce0089c 100644 --- a/packages/lib/algolia.cfc +++ b/packages/lib/algolia.cfc @@ -580,6 +580,12 @@ component { if (not this.typeSetup[arguments.stObject.typename]) { return false; } + + /* + if (StructKeyExists(arguments.stObject, 'status') && arguments.stObject.status != 'approved') { + return false; + } + */ var indexableTypes = getIndexableTypes(); return structKeyExists(indexableTypes, arguments.stObject.typename); @@ -744,11 +750,7 @@ component { // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft if (StructKeyExists(arguments.stObject, 'status') AND arguments.stObject['status'] != 'approved') { - stResult["typename"] = arguments.stObject.typename; - stResult["count"] = 0; - stResult["builtToDate"] = builtToDate; - - return stResult; + break; } stContent = oContent.getData(objectid=qContent.objectid); From 5395647f17008b43b0e9356f5a77621dd185fb80 Mon Sep 17 00:00:00 2001 From: Andrew Mercer Date: Wed, 21 Aug 2019 18:00:01 +1000 Subject: [PATCH 3/7] check the correct object --- packages/lib/algolia.cfc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/lib/algolia.cfc b/packages/lib/algolia.cfc index ce0089c..bc0f900 100644 --- a/packages/lib/algolia.cfc +++ b/packages/lib/algolia.cfc @@ -748,12 +748,12 @@ component { for (indexName in indexableTypes[qContent.typename]) { if (qContent.operation eq "updated") { - // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft - if (StructKeyExists(arguments.stObject, 'status') AND arguments.stObject['status'] != 'approved') { - break; - } - stContent = oContent.getData(objectid=qContent.objectid); + + // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft + if (StructKeyExists(stContent, 'status') AND stContent['status'] != 'approved') { + break; + } if ( (structKeyExists(oContent, "isIndexable") and oContent.isIndexable(indexName=indexname, stObject=stContent)) or From af05c435dc0f15182669c45a821af8ec89d51f52 Mon Sep 17 00:00:00 2001 From: Andrew Mercer Date: Wed, 21 Aug 2019 19:01:49 +1000 Subject: [PATCH 4/7] fix strOut if no data added --- packages/lib/algolia.cfc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/lib/algolia.cfc b/packages/lib/algolia.cfc index bc0f900..02a9c2a 100644 --- a/packages/lib/algolia.cfc +++ b/packages/lib/algolia.cfc @@ -770,7 +770,7 @@ component { strOut.append(qContent.objectid); strOut.append('" } }, '); } - } + } //indexName if ( strOut.length() * ((qContent.currentrow+1) / qContent.currentrow) gt arguments.requestSize or @@ -780,10 +780,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) { From 1bc1df7f275ca782a2f21e71ae7dc5d9f5e7ff2f Mon Sep 17 00:00:00 2001 From: Andrew Mercer Date: Wed, 21 Aug 2019 19:51:38 +1000 Subject: [PATCH 5/7] code clean up --- packages/lib/algolia.cfc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/lib/algolia.cfc b/packages/lib/algolia.cfc index 02a9c2a..df31ee9 100644 --- a/packages/lib/algolia.cfc +++ b/packages/lib/algolia.cfc @@ -580,12 +580,6 @@ component { if (not this.typeSetup[arguments.stObject.typename]) { return false; } - - /* - if (StructKeyExists(arguments.stObject, 'status') && arguments.stObject.status != 'approved') { - return false; - } - */ var indexableTypes = getIndexableTypes(); return structKeyExists(indexableTypes, arguments.stObject.typename); From 4b15e986160214a837cd217cf41eb141266515e4 Mon Sep 17 00:00:00 2001 From: Andrew Mercer Date: Thu, 9 Jan 2020 15:19:04 +1100 Subject: [PATCH 6/7] HPC-2088 - delete draft records from Algolia index --- packages/lib/algolia.cfc | 45 ++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/packages/lib/algolia.cfc b/packages/lib/algolia.cfc index b0037f7..9bec500 100644 --- a/packages/lib/algolia.cfc +++ b/packages/lib/algolia.cfc @@ -663,20 +663,21 @@ component { (not structKeyExists(oContent, "isIndexable") and isIndexable(indexName=indexname, stObject=stObject)) ) ) { - - // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft + if (StructKeyExists(arguments.stObject, 'status') AND arguments.stObject['status'] != 'approved') { - stResult["typename"] = arguments.stObject.typename; - stResult["count"] = 0; - stResult["builtToDate"] = builtToDate; - - return stResult; + // 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; } - - 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": '); @@ -743,19 +744,23 @@ component { if (qContent.operation eq "updated") { stContent = oContent.getData(objectid=qContent.objectid); - - // Approved only - draft records do not get updated to approved; new records added to index each time object goes to draft - if (StructKeyExists(stContent, 'status') AND stContent['status'] != 'approved') { - break; - } 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") { From fab4eb2cac80d2d58e29a3e1657a771a971c8c31 Mon Sep 17 00:00:00 2001 From: Andrew Mercer Date: Mon, 20 Jan 2020 10:40:14 +1100 Subject: [PATCH 7/7] fix hasAmbiguousTimestamps() - check for unique timestamps --- packages/forms/configAlgolia.cfc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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) {