(feature): dapr statestore handling

This commit is contained in:
Maksym Sadovnychyy 2024-11-14 13:40:44 +01:00
parent a6c9966d37
commit c1204b67b2
2 changed files with 66 additions and 1 deletions

View File

@ -1,11 +1,15 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Dapr.Client; using Dapr.Client;
using MaksIT.Results; using MaksIT.Results;
namespace MaksIT.Core.Dapr; namespace MaksIT.Core.Dapr;
public interface IDaprService { public interface IDaprService {
Task<Result> PublishEventAsync(string pubSubName, string topicName, string payload); Task<Result> PublishEventAsync(string pubSubName, string topicName, string payload);
Task<Result> SaveStateAsync<T>(string storeName, string key, T value);
Task<Result<T?>> GetStateAsync<T>(string storeName, string key);
Task<Result> DeleteStateAsync(string storeName, string key);
} }
public class DaprService : IDaprService { public class DaprService : IDaprService {
@ -22,6 +26,13 @@ public class DaprService : IDaprService {
_client = client; _client = client;
} }
/// <summary>
/// Publishes an event to a Dapr topic
/// </summary>
/// <param name="pubSubName"></param>
/// <param name="topicName"></param>
/// <param name="payload"></param>
/// <returns></returns>
public async Task<Result> PublishEventAsync(string pubSubName, string topicName, string payload) { public async Task<Result> PublishEventAsync(string pubSubName, string topicName, string payload) {
try { try {
await _client.PublishEventAsync(pubSubName, topicName, payload); await _client.PublishEventAsync(pubSubName, topicName, payload);
@ -32,4 +43,58 @@ public class DaprService : IDaprService {
return Result.InternalServerError(ex.Message); return Result.InternalServerError(ex.Message);
} }
} }
/// <summary>
/// Saves a state to a Dapr state store
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="storeName"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public async Task<Result> SaveStateAsync<T>(string storeName, string key, T value) {
try {
await _client.SaveStateAsync(storeName, key, value);
return Result.Ok();
}
catch (Exception ex) {
_logger.LogError(ex, _errorMessage);
return Result.InternalServerError(ex.Message);
}
}
/// <summary>
/// Gets a state from a Dapr state store
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="storeName"></param>
/// <param name="key"></param>
/// <returns></returns>
public async Task<Result<T?>> GetStateAsync<T>(string storeName, string key) {
try {
var state = await _client.GetStateAsync<T?>(storeName, key);
return Result<T?>.Ok(state);
}
catch (Exception ex) {
_logger.LogError(ex, _errorMessage);
return Result<T?>.InternalServerError(default, ex.Message);
}
}
/// <summary>
/// Deletes a state from a Dapr state store
/// </summary>
/// <param name="storeName"></param>
/// <param name="key"></param>
/// <returns></returns>
public async Task<Result> DeleteStateAsync(string storeName, string key) {
try {
await _client.DeleteStateAsync(storeName, key);
return Result.Ok();
}
catch (Exception ex) {
_logger.LogError(ex, _errorMessage);
return Result.InternalServerError(ex.Message);
}
}
} }

View File

@ -7,7 +7,7 @@
<!-- NuGet package metadata --> <!-- NuGet package metadata -->
<PackageId>MaksIT.Core.Dapr</PackageId> <PackageId>MaksIT.Core.Dapr</PackageId>
<Version>1.0.0</Version> <Version>1.0.1</Version>
<Authors>Maksym Sadovnychyy</Authors> <Authors>Maksym Sadovnychyy</Authors>
<Company>MAKS-IT</Company> <Company>MAKS-IT</Company>
<Product>MaksIT.Core.Dapr</Product> <Product>MaksIT.Core.Dapr</Product>