diff --git a/EventStoreProjections/EventStoreProjections.Tests.njsproj b/EventStoreProjections/EventStoreProjections.Tests.njsproj
index 3c8804e..a5f41be 100644
--- a/EventStoreProjections/EventStoreProjections.Tests.njsproj
+++ b/EventStoreProjections/EventStoreProjections.Tests.njsproj
@@ -43,6 +43,7 @@
+
diff --git a/EventStoreProjections/tests/MerchantBalanceAggregatorTests.js b/EventStoreProjections/tests/MerchantBalanceAggregatorTests.js
new file mode 100644
index 0000000..d748f44
--- /dev/null
+++ b/EventStoreProjections/tests/MerchantBalanceAggregatorTests.js
@@ -0,0 +1,93 @@
+require('../../NugetPackage/projections/continuous/MerchantBalanceAggregator.js');
+var projection = require('@transactionprocessing/esprojection-testing-framework');
+var testData = require('./TestData.js');
+var describe = require('tape-describe');
+var test = describe('Merchant Balance Aggregator Tests');
+
+test('Projection Can Handle Merchant Events',
+ t =>
+ {
+ projection.initialize();
+
+ var estateId = '3bf2dab2-86d6-44e3-bcf8-51bec65cf8bc';
+ var merchantId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8';
+ var merchantName = 'Test Merchant 1';
+
+ // Set up the merchant events
+ var merchantCreatedEvent = testData.getMerchantCreatedEvent(estateId, merchantId, merchantName);
+
+ var depositDateTime = '2020-05-30T06:21:31.356Z';
+ var depositAmount = 1000.00;
+ var manualDepositMadeEvent =
+ testData.getManualDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount);
+
+ var automaticDepositMadeEvent =
+ testData.getAutomaticDepositMadeEvent(estateId, merchantId, depositDateTime, depositAmount);
+
+ projection.processEvent(
+ 'MerchantAggregate-' + merchantId.replace(/-/gi, ""),
+ merchantCreatedEvent.eventType,
+ merchantCreatedEvent.data);
+
+ projection.processEvent(
+ 'MerchantAggregate-' + merchantId.replace(/-/gi, ""),
+ manualDepositMadeEvent.eventType,
+ manualDepositMadeEvent.data);
+
+ projection.processEvent(
+ 'MerchantAggregate-' + merchantId.replace(/-/gi, ""),
+ automaticDepositMadeEvent.eventType,
+ automaticDepositMadeEvent.data);
+
+ var events = projection.emittedEvents;
+ t.equal(events.length, 3);
+ t.end();
+ });
+
+test('Projection Can Handle Transaction Events',
+ t =>
+ {
+ projection.initialize();
+
+ var estateId = '3bf2dab2-86d6-44e3-bcf8-51bec65cf8bc';
+ var merchantId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8';
+ var transactionId = 'c4c33d75-f011-40e4-9d97-1f428ab563d8';
+ var transactionAmount = 100.00;
+ var transactionType = 'Sale';
+
+ var transactionHasStartedEvent = testData.getTransactionHasStartedEvent(estateId,
+ merchantId,
+ transactionId,
+ transactionAmount,
+ transactionType);
+
+ var transactionHasBeenCompletedEvent =
+ testData.getTransactionHasBeenCompletedEvent(estateId, merchantId, transactionId, true);
+
+ var calculatedValue = 5.00;
+ var eventCreatedDateTime = "2020-05-16T07:47:51.6617562+00:00";
+ var merchantFeeAddedToTransactionEvent = testData.getMerchantFeeAddedToTransactionEvent(estateId,
+ merchantId,
+ transactionId,
+ calculatedValue,
+ eventCreatedDateTime);
+
+ projection.processEvent(
+ 'TransactionAggregate-' + transactionId.replace(/-/gi, ""),
+ transactionHasStartedEvent.eventType,
+ transactionHasStartedEvent.data);
+
+ projection.processEvent(
+ 'TransactionAggregate-' + transactionId.replace(/-/gi, ""),
+ transactionHasBeenCompletedEvent.eventType,
+ transactionHasBeenCompletedEvent.data);
+
+ projection.processEvent(
+ 'TransactionAggregate-' + transactionId.replace(/-/gi, ""),
+ merchantFeeAddedToTransactionEvent.eventType,
+ merchantFeeAddedToTransactionEvent.data);
+
+ var events = projection.emittedEvents;
+ t.equal(events.length, 3);
+ t.end();
+ });
\ No newline at end of file
diff --git a/NugetPackage/NugetPackage.csproj b/NugetPackage/NugetPackage.csproj
index 86a0296..29bd709 100644
--- a/NugetPackage/NugetPackage.csproj
+++ b/NugetPackage/NugetPackage.csproj
@@ -30,4 +30,14 @@
+
+
+
+
+
+
+ Always
+
+
+
diff --git a/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json b/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json
index fb4228c..414ecbf 100644
--- a/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json
+++ b/NugetPackage/obj/NugetPackage.csproj.nuget.dgspec.json
@@ -28,7 +28,6 @@
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {},
- "https://nuget.devexpress.com/tP9yfuwysSqblTj4iZAmef8L1WgJPsXlZjZLvEacI8BaCoK3A1/api": {},
"https://www.myget.org/F/transactionprocessing/api/v3/index.json": {},
"https://www.myget.org/F/vme-intellistore/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {},
"https://www.myget.org/F/vme-shared/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {}
@@ -64,7 +63,7 @@
"privateAssets": "all"
}
},
- "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.401\\RuntimeIdentifierGraph.json"
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.100-rc.2.22477.23\\RuntimeIdentifierGraph.json"
}
}
}
diff --git a/NugetPackage/obj/NugetPackage.csproj.nuget.g.props b/NugetPackage/obj/NugetPackage.csproj.nuget.g.props
index 1937de4..35c5861 100644
--- a/NugetPackage/obj/NugetPackage.csproj.nuget.g.props
+++ b/NugetPackage/obj/NugetPackage.csproj.nuget.g.props
@@ -7,7 +7,7 @@
$(UserProfile)\.nuget\packages\
C:\Users\stuar\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder
PackageReference
- 6.3.0
+ 6.4.0
diff --git a/NugetPackage/obj/project.assets.json b/NugetPackage/obj/project.assets.json
index 192c004..9aa4546 100644
--- a/NugetPackage/obj/project.assets.json
+++ b/NugetPackage/obj/project.assets.json
@@ -36,7 +36,6 @@
"sources": {
"C:\\Program Files\\dotnet\\library-packs": {},
"https://api.nuget.org/v3/index.json": {},
- "https://nuget.devexpress.com/tP9yfuwysSqblTj4iZAmef8L1WgJPsXlZjZLvEacI8BaCoK3A1/api": {},
"https://www.myget.org/F/transactionprocessing/api/v3/index.json": {},
"https://www.myget.org/F/vme-intellistore/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {},
"https://www.myget.org/F/vme-shared/auth/024ff48c-540a-4059-8712-d54f7b0d6a31/api/v3/index.json": {}
@@ -72,7 +71,7 @@
"privateAssets": "all"
}
},
- "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.401\\RuntimeIdentifierGraph.json"
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.100-rc.2.22477.23\\RuntimeIdentifierGraph.json"
}
}
}
diff --git a/NugetPackage/obj/project.nuget.cache b/NugetPackage/obj/project.nuget.cache
index 324312d..b348e77 100644
--- a/NugetPackage/obj/project.nuget.cache
+++ b/NugetPackage/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "KbjJ6b/Y+kTy1GKsVWpr7Z3DDcY3Fx1ElosAQ1kHqJTgRiQCXFzRulAKCOqka9t8HA4vmisX5vbm1ENdIq+C8Q==",
+ "dgSpecHash": "zKSi6wid/WSnBVdoC/xTn5nYXu7whOdnAbYDX2c907cmEVYMfmCreIiWizMZeX0Heo5FKLmFLarJl29Q9A9qJg==",
"success": true,
"projectFilePath": "C:\\Projects\\TransactionProcessing\\EventStoreProjections\\NugetPackage\\NugetPackage.csproj",
"expectedPackageFiles": [],
diff --git a/NugetPackage/projections/continuous/MerchantBalanceAggregator.js b/NugetPackage/projections/continuous/MerchantBalanceAggregator.js
new file mode 100644
index 0000000..4cbc140
--- /dev/null
+++ b/NugetPackage/projections/continuous/MerchantBalanceAggregator.js
@@ -0,0 +1,46 @@
+//starttestsetup
+var fromAll = fromAll || require("../../../EventStoreProjections/node_modules/@transactionprocessing/esprojection-testing-framework").scope.fromAll;
+var linkTo = linkTo || require("../../../EventStoreProjections/node_modules/@transactionprocessing/esprojection-testing-framework").scope.linkTo;
+//endtestsetup
+
+isValidEvent = function (e) {
+
+ if (e) {
+ if (e.data) {
+ if (e.isJson) {
+ if (e.eventType !== "$metadata") {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+};
+
+getMerchantId = function (e) {
+ if (e.data.merchantId === undefined) {
+ return null;
+ }
+ return e.data.merchantId;
+};
+
+fromAll()
+ .when({
+ $any: function (s, e) {
+ if (isValidEvent(e)) {
+ var merchantId = getMerchantId(e);
+ if (merchantId !== null) {
+ if (e.eventType == "MerchantCreatedEvent" ||
+ e.eventType === "ManualDepositMadeEvent" ||
+ e.eventType === "AutomaticDepositMadeEvent" ||
+ e.eventType === "TransactionHasStartedEvent" ||
+ e.eventType === "TransactionHasBeenCompletedEvent" ||
+ e.eventType === "MerchantFeeAddedToTransactionEvent") {
+ var streamName = "MerchantBalanceArchive-" + merchantId.replace(/-/gi, "");
+ linkTo(streamName, e);
+ }
+ }
+ }
+ }
+ });
\ No newline at end of file