@@ -36,10 +36,7 @@ import { TRANSACTION_OPTIONS } from '@imports/consts';
3636import { find } from "@imports/data/api" ;
3737import { client } from '@imports/database' ;
3838import { Konsistent } from '@imports/konsistent' ;
39- import processIncomingChange from '@imports/konsistent/processIncomingChange' ;
4039import eventManager from '@imports/lib/EventManager' ;
41- import queueManager from '@imports/queue/QueueManager' ;
42- import objectsDiff from '@imports/utils/objectsDiff' ;
4340import { dateToString , stringToDate } from '../data/dateParser' ;
4441import { populateLookupsData } from '../data/populateLookupsData' ;
4542import { processCollectionLogin } from '../data/processCollectionLogin' ;
@@ -751,11 +748,19 @@ export async function create({ authTokenId, document, data, contextUser, upsert,
751748 } , dbSession ) ;
752749
753750 if ( loginFieldResult . success === false ) {
751+ await dbSession . abortTransaction ( ) ;
754752 return loginFieldResult ;
755753 }
756754
757755 set ( newRecord , get ( metaObject , 'login.field' , 'login' ) , loginFieldResult . data ) ;
758756 }
757+
758+ const walResult = await Konsistent . writeAheadLog ( document , 'create' , newRecord , user , dbSession ) ;
759+ if ( walResult . success === false ) {
760+ await dbSession . abortTransaction ( ) ;
761+ return walResult ;
762+ }
763+
759764 if ( upsert != null && isObject ( upsert ) ) {
760765 const updateOperation = {
761766 $setOnInsert : { } ,
@@ -881,17 +886,13 @@ export async function create({ authTokenId, document, data, contextUser, upsert,
881886 ) ;
882887 }
883888
884- // Process sync Konsistent
885- if ( MetaObject . Namespace . plan ?. useExternalKonsistent !== true || Konsistent . isQueueEnabled === false ) {
886- try {
887- tracingSpan ?. addEvent ( 'Processing sync Konsistent' ) ;
888- await processIncomingChange ( document , resultRecord , 'create' , user , resultRecord , dbSession ) ;
889- } catch ( e ) {
890- tracingSpan ?. addEvent ( 'Error on Konsistent' , { error : e . message } ) ;
891- logger . error ( e , `Error on processIncomingChange ${ document } : ${ e . message } ` ) ;
892- await dbSession . abortTransaction ( ) ;
893- return errorReturn ( `[${ document } ] Error on Konsistent: ${ e . message } ` ) ;
894- }
889+ try {
890+ await Konsistent . processChangeSync ( document , 'create' , user , { newRecord : resultRecord } , dbSession ) ;
891+ } catch ( e ) {
892+ tracingSpan ?. addEvent ( 'Error on sync Konsistent' , { error : e . message } ) ;
893+ logger . error ( e , `Error on sync Konsistent ${ document } : ${ e . message } ` ) ;
894+ await dbSession . abortTransaction ( ) ;
895+ return errorReturn ( `[${ document } ] Error on sync Konsistent: ${ e . message } ` ) ;
895896 }
896897
897898 return successReturn ( [ dateToString ( resultRecord ) ] ) ;
@@ -907,18 +908,10 @@ export async function create({ authTokenId, document, data, contextUser, upsert,
907908 if ( transactionResult . success === true && transactionResult . data ?. [ 0 ] != null ) {
908909 const record = transactionResult . data [ 0 ] ;
909910
910- // Process Konsistent
911- if ( MetaObject . Namespace . plan ?. useExternalKonsistent === true && Konsistent . isQueueEnabled ) {
912- tracingSpan ?. addEvent ( 'Sending Konsistent message' ) ;
913- try {
914- await queueManager . sendMessage ( Konsistent . queue . resource , Konsistent . queue . name , {
915- metaName : document ,
916- operation : 'create' ,
917- data : record
918- } ) ;
919- } catch ( e ) {
920- logger . error ( e , `Error sending Konsistent message: ${ e . message } ` ) ;
921- }
911+ try {
912+ await Konsistent . processChangeAsync ( record ) ;
913+ } catch ( e ) {
914+ logger . error ( e , `Error sending Konsistent message: ${ e . message } ` ) ;
922915 }
923916
924917 // Send events
@@ -1325,6 +1318,21 @@ export async function update({ authTokenId, document, data, contextUser, tracing
13251318 ) ;
13261319 }
13271320
1321+ const walResults = await BluebirdPromise . map (
1322+ updateResults ,
1323+ async result => await Konsistent . writeAheadLog ( document , 'update' , result . data , user , dbSession ) ,
1324+ { concurrency : 5 } ,
1325+ ) ;
1326+
1327+ if ( walResults . some ( result => result . success === false ) ) {
1328+ await dbSession . abortTransaction ( ) ;
1329+ return errorReturn (
1330+ walResults
1331+ . filter ( result => result . success === false )
1332+ . map ( result => result . errors )
1333+ . flat ( ) ,
1334+ ) ;
1335+ }
13281336 const updatedIs = updateResults . map ( result => result . data . _id ) ;
13291337
13301338 if ( updatedIs . length > 0 ) {
@@ -1380,23 +1388,17 @@ export async function update({ authTokenId, document, data, contextUser, tracing
13801388 }
13811389
13821390 // Process sync Konsistent
1383- if ( MetaObject . Namespace . plan ?. useExternalKonsistent !== true || Konsistent . isQueueEnabled === false ) {
1384- logger . debug ( 'Processing Konsistent' ) ;
1385- for await ( const record of updatedRecords ) {
1386- const original = existsRecords . find ( r => r . _id === record . _id ) ;
1387- const newRecord = omit ( record , [ '_id' , '_createdAt' , '_createdBy' , '_updatedAt' , '_updatedBy' ] ) ;
1388- const changedProps = objectsDiff ( original , newRecord ) ;
1391+ for await ( const newRecord of updatedRecords ) {
1392+ const originalRecord = existsRecords . find ( r => r . _id === newRecord . _id ) ;
13891393
1390- try {
1391- tracingSpan ?. addEvent ( 'Processing sync Konsistent' ) ;
1392- await processIncomingChange ( document , record , 'update' , user , changedProps , dbSession ) ;
1393- } catch ( e ) {
1394- logger . error ( e , `Error on processIncomingChange ${ document } : ${ e . message } ` ) ;
1395- tracingSpan ?. addEvent ( 'Error on Konsistent' , { error : e . message } ) ;
1396- await dbSession . abortTransaction ( ) ;
1394+ try {
1395+ await Konsistent . processChangeSync ( document , 'update' , user , { originalRecord, newRecord } , dbSession ) ;
1396+ } catch ( e ) {
1397+ logger . error ( e , `Error on processIncomingChange ${ document } : ${ e . message } ` ) ;
1398+ tracingSpan ?. addEvent ( 'Error on Konsistent' , { error : e . message } ) ;
1399+ await dbSession . abortTransaction ( ) ;
13971400
1398- return errorReturn ( `[${ document } ] Error on Konsistent: ${ e . message } ` ) ;
1399- }
1401+ return errorReturn ( `[${ document } ] Error on Konsistent: ${ e . message } ` ) ;
14001402 }
14011403 }
14021404
@@ -1436,23 +1438,11 @@ export async function update({ authTokenId, document, data, contextUser, tracing
14361438 if ( transactionResult . success === true && transactionResult . data ?. length > 0 ) {
14371439 const updatedRecords = transactionResult . data ;
14381440
1439- // Process Konsistent
1440- if ( MetaObject . Namespace . plan ?. useExternalKonsistent === true && Konsistent . isQueueEnabled ) {
1441- tracingSpan ?. addEvent ( 'Sending Konsistent messages' ) ;
1442- for ( const record of updatedRecords ) {
1443- try {
1444- const original = existsRecords . find ( r => r . _id === record . _id ) ;
1445- const newRecord = omit ( record , [ '_id' , '_createdAt' , '_createdBy' , '_updatedAt' , '_updatedBy' ] ) ;
1446- const changedProps = objectsDiff ( original , newRecord ) ;
1447-
1448- await queueManager . sendMessage ( Konsistent . queue . resource , Konsistent . queue . name , {
1449- metaName : document ,
1450- operation : 'update' ,
1451- data : changedProps
1452- } ) ;
1453- } catch ( e ) {
1454- logger . error ( e , `Error sending Konsistent message: ${ e . message } ` ) ;
1455- }
1441+ for ( const record of updatedRecords ) {
1442+ try {
1443+ await Konsistent . processChangeAsync ( record ) ;
1444+ } catch ( e ) {
1445+ logger . error ( e , `Error sending Konsistent message: ${ e . message } ` ) ;
14561446 }
14571447 }
14581448
0 commit comments