diff --git a/LICENSE.md b/LICENSE.md index 7ab9427..edbe7fe 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Maksym Sadovnychyy (MAKS-IT) +Copyright (c) 2024 - 2025 Maksym Sadovnychyy (MAKS-IT) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/src/MaksIT.Dapr/Extensions/ServiceCollectionExtensions.cs b/src/MaksIT.Dapr/Extensions/ServiceCollectionExtensions.cs index 098aeaa..3bea7c8 100644 --- a/src/MaksIT.Dapr/Extensions/ServiceCollectionExtensions.cs +++ b/src/MaksIT.Dapr/Extensions/ServiceCollectionExtensions.cs @@ -1,14 +1,26 @@ -using Microsoft.Extensions.DependencyInjection; +using MaksIT.Dapr.Services; +using Microsoft.Extensions.DependencyInjection; + namespace MaksIT.Dapr.Extensions; + public static class ServiceCollectionExtensions { + private static bool _isDaprClientRegistered = false; + + private static void AddDaprClientOnce(this IServiceCollection services) { + if (!_isDaprClientRegistered) { + services.AddDaprClient(); + _isDaprClientRegistered = true; + } + } + public static void RegisterPublisher(this IServiceCollection services) { - services.AddDaprClient(); - services.AddSingleton(); + services.AddDaprClientOnce(); + services.AddSingleton(); } public static void RegisterStateStore(this IServiceCollection services) { - services.AddDaprClient(); - services.AddSingleton(); + services.AddDaprClientOnce(); + services.AddSingleton(); } } \ No newline at end of file diff --git a/src/MaksIT.Dapr/MaksIT.Dapr.csproj b/src/MaksIT.Dapr/MaksIT.Dapr.csproj index 3c87dcc..801ef65 100644 --- a/src/MaksIT.Dapr/MaksIT.Dapr.csproj +++ b/src/MaksIT.Dapr/MaksIT.Dapr.csproj @@ -7,7 +7,7 @@ MaksIT.Dapr - 1.0.7 + 1.0.8 Maksym Sadovnychyy MAKS-IT MaksIT.Dapr @@ -17,16 +17,20 @@ MIT false README.md + LICENSE.md + - - - + + + + + diff --git a/src/MaksIT.Dapr/Services/DaprPublisherService.cs b/src/MaksIT.Dapr/Services/DaprPublisherService.cs new file mode 100644 index 0000000..eebb677 --- /dev/null +++ b/src/MaksIT.Dapr/Services/DaprPublisherService.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.Logging; + +using Dapr.Client; + +using MaksIT.Results; +using MaksIT.Core.Extensions; + +namespace MaksIT.Dapr.Services; +public interface IDaprPublisherService { + Task PublishEventAsync(string pubsubName, string topicName, object payload); +} + +public class DaprPublisherService : IDaprPublisherService { + private const string _errorMessage = "MaksIT.Dapr - Event publishing error"; + + private readonly DaprClient _client; + private readonly ILogger _logger; + + public DaprPublisherService( + ILogger logger, + DaprClient client + ) { + _logger = logger; + _client = client; + } + + public async Task PublishEventAsync(string pubsubName, string topicName, object payload) { + try { + await _client.PublishEventAsync(pubsubName, topicName, payload); + return Result.Ok(); + } + catch (Exception ex) { + _logger.LogError(ex, _errorMessage); + return Result.InternalServerError([_errorMessage, .. ex.ExtractMessages()]); + } + } +} \ No newline at end of file diff --git a/src/MaksIT.Dapr/DaprService.cs b/src/MaksIT.Dapr/Services/DaprStateStoreService.cs similarity index 60% rename from src/MaksIT.Dapr/DaprService.cs rename to src/MaksIT.Dapr/Services/DaprStateStoreService.cs index 6dd6242..0db132b 100644 --- a/src/MaksIT.Dapr/DaprService.cs +++ b/src/MaksIT.Dapr/Services/DaprStateStoreService.cs @@ -3,61 +3,29 @@ using Dapr.Client; using MaksIT.Results; +using MaksIT.Core.Extensions; -namespace MaksIT.Dapr; - -public interface IDaprPublisherService { - Task PublishEventAsync(string pubSubName, string topicName, string payload); -} - +namespace MaksIT.Dapr.Services; public interface IDaprStateStoreService { Task SetStateAsync(string storeName, string key, T value); Task> GetStateAsync(string storeName, string key); Task DeleteStateAsync(string storeName, string key); } -public class DaprService : IDaprPublisherService, IDaprStateStoreService { + +public class DaprStateStoreService : IDaprStateStoreService { private const string _errorMessage = "MaksIT.Dapr - Data provider error"; private readonly DaprClient _client; - private readonly ILogger _logger; + private readonly ILogger _logger; - public DaprService( - ILogger logger, + public DaprStateStoreService( + ILogger logger, DaprClient client ) { _logger = logger; _client = client; } - - /// - /// Publishes an event to a Dapr topic - /// - /// - /// - /// - /// - public async Task PublishEventAsync(string pubSubName, string topicName, string payload) { - try { - - var traceId = System.Diagnostics.Activity.Current?.TraceId.ToString(); - - if (!string.IsNullOrEmpty(traceId)) { - var metadata = new Dictionary { ["traceid"] = traceId }; - await _client.PublishEventAsync(pubSubName, topicName, payload, metadata); - } - else { - await _client.PublishEventAsync(pubSubName, topicName, payload); - } - - return Result.Ok(); - } - catch (Exception ex) { - _logger.LogError(ex, _errorMessage); - return Result.InternalServerError(ex.Message); - } - } - /// /// Saves a state to a Dapr state store /// @@ -73,7 +41,7 @@ public class DaprService : IDaprPublisherService, IDaprStateStoreService { } catch (Exception ex) { _logger.LogError(ex, _errorMessage); - return Result.InternalServerError(ex.Message); + return Result.InternalServerError(new[] {_errorMessage}.Concat(ex.ExtractMessages()).ToArray()); } } @@ -94,7 +62,7 @@ public class DaprService : IDaprPublisherService, IDaprStateStoreService { } catch (Exception ex) { _logger.LogError(ex, _errorMessage); - return Result.InternalServerError(default, ex.Message); + return Result.InternalServerError(default, new[] {_errorMessage}.Concat(ex.ExtractMessages()).ToArray()); } } @@ -111,7 +79,7 @@ public class DaprService : IDaprPublisherService, IDaprStateStoreService { } catch (Exception ex) { _logger.LogError(ex, _errorMessage); - return Result.InternalServerError(ex.Message); + return Result.InternalServerError([_errorMessage, .. ex.ExtractMessages()]); } } } \ No newline at end of file