feat: replace manual Stopwatch with IProfiler in TransactionBehavior

- Add HrynCo.Common to Services project
- TransactionBehavior now uses IProfiler.MeasureExecutionAsync:
  MeasureExecutionAsync -> ExecuteInTransactionAsync -> next() -> SaveChangesAsync
- Profiler logs Start/End with duration + memory delta via Serilog PerformanceLog context
- Register IProfiler as singleton in ServiceCollectionExtensions (uses Log.Logger)

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Anatolii Grynchuk
2026-05-02 01:15:10 +03:00
parent a03d2269a6
commit 92be035f51
5 changed files with 19 additions and 28 deletions
@@ -1,7 +1,9 @@
using HrynCo.Common;
using HrynCo.NotificationService.Services.Behaviors;
using HrynCo.NotificationService.Services.Logging;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
namespace HrynCo.NotificationService.Services;
@@ -16,6 +18,7 @@ public static class ServiceCollectionExtensions
});
services.AddTransient(typeof(IContextualSerilogLogger<>), typeof(ContextualSerilogLogger<>));
services.AddSingleton<IProfiler>(new Profiler(Log.Logger));
return services;
}