Migrates connection strings to new database host Removes unnecessary code and improves configuration handling Enhances test coverage and adds random word generation Updates telemetry and command handling patterns
43 lines
No EOL
1.6 KiB
C#
43 lines
No EOL
1.6 KiB
C#
using System.Diagnostics;
|
|
using Microsoft.ApplicationInsights;
|
|
using Microsoft.ApplicationInsights.DataContracts;
|
|
using PlanTempus.Core.CommandQueries;
|
|
|
|
namespace PlanTempus.Components.Users.Create;
|
|
|
|
public class CommandHandlerDecorator<TCommand>(
|
|
ICommandHandler<TCommand> decoratedHandler,
|
|
TelemetryClient telemetryClient) : ICommandHandler<TCommand>, ICommandHandlerDecorator where TCommand : ICommand
|
|
{
|
|
public async Task<CommandResponse> Handle(TCommand command)
|
|
{
|
|
command.TransactionId = Guid.NewGuid();
|
|
using var operation =
|
|
telemetryClient.StartOperation<RequestTelemetry>($"Handle {decoratedHandler.GetType().FullName}",
|
|
command.CorrelationId.ToString());
|
|
try
|
|
{
|
|
operation.Telemetry.Properties["CorrelationId"] = command.CorrelationId.ToString();
|
|
operation.Telemetry.Properties["TransactionId"] = command.TransactionId.ToString();
|
|
|
|
var result = await decoratedHandler.Handle(command);
|
|
|
|
operation.Telemetry.Properties["RequestId"] = result.RequestId.ToString();
|
|
operation.Telemetry.Success = true;
|
|
|
|
return result;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
operation.Telemetry.Success = false;
|
|
|
|
telemetryClient.TrackException(ex, new Dictionary<string, string>
|
|
{
|
|
["CorrelationId"] = command.CorrelationId.ToString(),
|
|
["Command"] = command.GetType().Name,
|
|
["CommandHandler"] = decoratedHandler.GetType().FullName
|
|
});
|
|
throw;
|
|
}
|
|
}
|
|
} |