Added Event Tracking!
This commit is contained in:
+3
@@ -11,6 +11,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions">
|
||||||
|
<HintPath>..\..\..\..\..\..\.nuget\packages\microsoft.extensions.logging.abstractions\10.0.9\lib\net10.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Wolverine">
|
<Reference Include="Wolverine">
|
||||||
<HintPath>..\..\..\..\..\..\.nuget\packages\wolverinefx\6.18.0\lib\net10.0\Wolverine.dll</HintPath>
|
<HintPath>..\..\..\..\..\..\.nuget\packages\wolverinefx\6.18.0\lib\net10.0\Wolverine.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace FinancialApi.Application;
|
||||||
|
|
||||||
|
public static class FinancialEventHandler
|
||||||
|
{
|
||||||
|
public static void Handle(
|
||||||
|
FeeAppliedEvent @event,
|
||||||
|
IEventTracker store,
|
||||||
|
ILogger logger)
|
||||||
|
{
|
||||||
|
var message = $"FeeApplied: ${@event.Amount} moved from Account {@event.AccountId} to Account 99999.";
|
||||||
|
|
||||||
|
logger.LogInformation("BACKGROUND EVENT FIRED: {Message}", message);
|
||||||
|
|
||||||
|
// Save to our UI bucket
|
||||||
|
store.Add(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Handle(
|
||||||
|
FundsTransferredEvent @event,
|
||||||
|
IEventTracker store,
|
||||||
|
ILogger logger)
|
||||||
|
{
|
||||||
|
var message = $"FundsTransferred: ${@event.Amount} moved from Account {@event.SourceAccountId} to Account {@event.DestinationAccountId}.";
|
||||||
|
|
||||||
|
logger.LogInformation("BACKGROUND EVENT FIRED: {Message}", message);
|
||||||
|
|
||||||
|
// Save to our UI bucket
|
||||||
|
store.Add(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Handle(
|
||||||
|
JournalReversedEvent @event,
|
||||||
|
IEventTracker store,
|
||||||
|
ILogger logger)
|
||||||
|
{
|
||||||
|
var message = $"JournalReversed: Original Entry {@event.OriginalJournalId} was reversed by Entry {@event.ReversalJournalId}.";
|
||||||
|
logger.LogInformation("BACKGROUND EVENT FIRED: {Message}", message);
|
||||||
|
store.Add(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace FinancialApi.Application;
|
||||||
|
|
||||||
|
public interface IEventTracker
|
||||||
|
{
|
||||||
|
void Add(string eventMessage);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using FinancialApi.Application;
|
||||||
|
|
||||||
|
namespace FinancialApi;
|
||||||
|
|
||||||
|
public class DemoEventStore : IEventTracker
|
||||||
|
{
|
||||||
|
public List<string> CapturedEvents { get; } = new();
|
||||||
|
|
||||||
|
public void Add(string eventMessage)
|
||||||
|
{
|
||||||
|
CapturedEvents.Add($"[{DateTimeOffset.UtcNow:HH:mm:ss}] {eventMessage}");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,6 +31,11 @@ POST {{FinancialApi_HostAddress}}/journal/reverse
|
|||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
{
|
{
|
||||||
"originalJournalId": "3E829F92-E2FA-4FCD-9B7B-E1B5AAC96FF1",
|
"originalJournalId": "1443B0FC-F679-4445-A910-CC333F0925B7",
|
||||||
"reason": "Incorrect Account Fee"
|
"reason": "Incorrect Account Fee"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
GET {{FinancialApi_HostAddress}}/events
|
||||||
|
Content-Type: application/json
|
||||||
@@ -22,6 +22,7 @@ builder.Services.AddDbContext<AccountDbContext>(options =>
|
|||||||
|
|
||||||
builder.Services.AddScoped<IAccountQuery, AccountQuery>();
|
builder.Services.AddScoped<IAccountQuery, AccountQuery>();
|
||||||
builder.Services.AddScoped<IReversalQuery, ReversalQuery>();
|
builder.Services.AddScoped<IReversalQuery, ReversalQuery>();
|
||||||
|
builder.Services.AddSingleton<IEventTracker, DemoEventStore>();
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
|
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
|
||||||
@@ -31,6 +32,7 @@ builder.AddServiceDefaults();
|
|||||||
|
|
||||||
builder.Host.UseWolverine(opts =>
|
builder.Host.UseWolverine(opts =>
|
||||||
{
|
{
|
||||||
|
opts.Discovery.IncludeAssembly(typeof(DemoEventStore).Assembly);
|
||||||
opts.Discovery.IncludeAssembly(typeof(ApplyFeeHandler).Assembly);
|
opts.Discovery.IncludeAssembly(typeof(ApplyFeeHandler).Assembly);
|
||||||
opts.PersistMessagesWithSqlite(connectionString);
|
opts.PersistMessagesWithSqlite(connectionString);
|
||||||
opts.UseEntityFrameworkCoreTransactions();
|
opts.UseEntityFrameworkCoreTransactions();
|
||||||
@@ -74,4 +76,13 @@ app.MapPost("/journal/reverse", async (ReverseJournalCommand cmd, IMessageBus bu
|
|||||||
return Results.Accepted();
|
return Results.Accepted();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.MapGet("/events", (IEventTracker tracker) =>
|
||||||
|
{
|
||||||
|
if (tracker is DemoEventStore store)
|
||||||
|
{
|
||||||
|
return Results.Ok(store.CapturedEvents);
|
||||||
|
}
|
||||||
|
return Results.NotFound();
|
||||||
|
});
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
Reference in New Issue
Block a user