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
@@ -17,8 +17,10 @@ public abstract class RequestHandler<TRequest, TResponse> : IRequestHandler<TReq
protected ILogger Logger { get; }
protected IUnitOfWork UnitOfWork { get; }
public Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken) =>
DoOnHandle(request, cancellationToken);
public Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken)
{
return DoOnHandle(request, cancellationToken);
}
protected abstract Task<TResponse> DoOnHandle(TRequest request, CancellationToken cancellationToken);
}
}