Skip to content

Commit

Permalink
Updating handler signatures for requestcontext
Browse files Browse the repository at this point in the history
  • Loading branch information
aritchie committed Jan 21, 2025
1 parent 8187a81 commit ebfd808
Show file tree
Hide file tree
Showing 37 changed files with 90 additions and 85 deletions.
6 changes: 2 additions & 4 deletions samples/Sample.Api/Handlers/GetResultRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ namespace Sample.Api.Handlers;
[MediatorHttpGet("GetThing", "/getthing/{parameter}")]
public class GetResultRequestHandler : IRequestHandler<GetThingRequest, string>
{
public Task<string> Handle(GetThingRequest request, CancellationToken cancellationToken)
{
return Task.FromResult($"Route: {request.Parameter} - Query: {request.Query}");
}
public Task<string> Handle(GetThingRequest request, RequestContext<GetThingRequest> context, CancellationToken cancellationToken)
=> Task.FromResult($"Route: {request.Parameter} - Query: {request.Query}");
}

public class GetThingRequest : IRequest<string>
Expand Down
6 changes: 2 additions & 4 deletions samples/Sample.Api/Handlers/MappedRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ public record MappedRequest : IRequest<string>;
[SingletonHandler]
public class MappedRequestHandler : IRequestHandler<MappedRequest, string>
{
public Task<string> Handle(MappedRequest request, CancellationToken cancellationToken)
{
return Task.FromResult("Hello world from mapped handler");
}
public Task<string> Handle(MappedRequest request, RequestContext<MappedRequest> context, CancellationToken cancellationToken)
=> Task.FromResult("Hello world from mapped handler");
}
6 changes: 2 additions & 4 deletions samples/Sample.Api/Handlers/TestResultRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ public record TestResult;
[MediatorHttpPost("TestResult", "/testresult")]
public class TestResultRequestHandler : IRequestHandler<TestResultRequest, TestResult>
{
public Task<TestResult> Handle(TestResultRequest request, CancellationToken cancellationToken)
{
return Task.FromResult(new TestResult());
}
public Task<TestResult> Handle(TestResultRequest request, RequestContext<TestResultRequest> context, CancellationToken cancellationToken)
=> Task.FromResult(new TestResult());
}
4 changes: 2 additions & 2 deletions samples/Sample.Blazor/Handlers/DoThingRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ namespace Sample.Blazor.Handlers;
public class DoThingRequestHandler(IMediator mediator) : IRequestHandler<DoThing, int>
{
[OfflineAvailable]
public async Task<int> Handle(DoThing request, CancellationToken cancellationToken)
public async Task<int> Handle(DoThing request, RequestContext<DoThing> context, CancellationToken cancellationToken)
{
var num = new Random().Next(1, 1000000);
var value = $"{request.Text} - number: {num}";
await mediator.Publish(new TheThing(value), cancellationToken);

return num;
}
}
2 changes: 1 addition & 1 deletion samples/Sample.Blazor/Pages/Home.razor
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Welcome to your new app.
this.text = null;
}

public Task Handle(TheThing @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(TheThing @event, EventContext<TheThing> context, CancellationToken cancellationToken)
{
Console.WriteLine("Received TheThing");
this.eventText = @event.Text;
Expand Down
2 changes: 1 addition & 1 deletion samples/Sample/AnotherViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ public void OnNavigatedTo(INavigationParameters parameters)
[ObservableProperty] string arg;

[MainThread]
public Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) =>
public Task Handle(MyMessageEvent @event, EventContext<MyMessageEvent> context, CancellationToken cancellationToken) =>
conn.Log("AnotherViewModel", @event);
}
2 changes: 1 addition & 1 deletion samples/Sample/Components/Pages/Home.razor
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Welcome to your new app.

@code {
// TODO: should nav to another page to test that this disconnects
public async Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken)
public async Task Handle(MyMessageEvent @event, EventContext<MyMessageEvent> context, CancellationToken cancellationToken)
{
await conn.Log("BlazorPage-Home.razor", @event);
}
Expand Down
2 changes: 1 addition & 1 deletion samples/Sample/Handlers/CachedRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Sample.Handlers;
public class CachedRequestHandler : IRequestHandler<CacheRequest, string>
{
[Cache(AbsoluteExpirationSeconds = 20)]
public Task<string> Handle(CacheRequest request, CancellationToken cancellationToken)
public Task<string> Handle(CacheRequest request, RequestContext<CacheRequest> context, CancellationToken cancellationToken)
{
var r = DateTimeOffset.Now.ToString("h:mm:ss tt");
return Task.FromResult(r);
Expand Down
2 changes: 1 addition & 1 deletion samples/Sample/Handlers/OfflineRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Sample.Handlers;
public class OfflineRequestHandler : IRequestHandler<OfflineRequest, string>
{
[OfflineAvailable]
public Task<string> Handle(OfflineRequest request, CancellationToken cancellationToken)
public Task<string> Handle(OfflineRequest request, RequestContext<OfflineRequest> context, CancellationToken cancellationToken)
{
var r = DateTimeOffset.Now.ToString("h:mm:ss tt");
return Task.FromResult(r);
Expand Down
2 changes: 1 addition & 1 deletion samples/Sample/Handlers/ResilientRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public class ResilientRequestHandler : IRequestHandler<ResilientRequest, string>
{
static bool timeoutRequest;

public async Task<string> Handle(ResilientRequest request, CancellationToken cancellationToken)
public async Task<string> Handle(ResilientRequest request, RequestContext<ResilientRequest> context, CancellationToken cancellationToken)
{
if (timeoutRequest)
{
Expand Down
2 changes: 1 addition & 1 deletion samples/Sample/Handlers/SingletonEventHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Sample.Handlers;
[SingletonHandler]
public class SingletonEventHandler(IMediator mediator, AppSqliteConnection data) : IEventHandler<MyMessageEvent>
{
public async Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken)
public async Task Handle(MyMessageEvent @event, EventContext<MyMessageEvent> context, CancellationToken cancellationToken)
{
var random = new Random();
var wait = random.Next(500, 5000);
Expand Down
2 changes: 1 addition & 1 deletion samples/Sample/Handlers/SingletonRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public class SingletonRequestHandler(IMediator mediator, AppSqliteConnection dat
{
// [Cache(Storage = StoreType.File, MaxAgeSeconds = 30, OnlyForOffline = true)]
[OfflineAvailable]
public async Task<MyMessageResponse> Handle(MyMessageRequest request, CancellationToken cancellationToken)
public async Task<MyMessageResponse> Handle(MyMessageRequest request, RequestContext<MyMessageRequest> context, CancellationToken cancellationToken)
{
var e = new MyMessageEvent(
request.Arg,
Expand Down
2 changes: 1 addition & 1 deletion samples/Sample/TriggerViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ IPageDialogService dialogs


[MainThread]
public Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(MyMessageEvent @event, EventContext<MyMessageEvent> context, CancellationToken cancellationToken)
{
// do something async here
Console.WriteLine("Scoped Handler: " + @event.Arg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ public class OfflineFlushEventHandlers(IOfflineService offline) :
IEventHandler<FlushStoreByRequestEvent>,
IEventHandler<FlushStoreByTypeEvent>
{
public Task Handle(FlushAllStoresEvent @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(FlushAllStoresEvent @event, EventContext<FlushAllStoresEvent> context, CancellationToken cancellationToken)
=> offline.Clear();

public Task Handle(FlushStoreByRequestEvent @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(FlushStoreByRequestEvent @event, EventContext<FlushStoreByRequestEvent> context, CancellationToken cancellationToken)
=> offline.ClearByRequest(@event.Request);

public Task Handle(FlushStoreByTypeEvent @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(FlushStoreByTypeEvent @event, EventContext<FlushStoreByTypeEvent> context, CancellationToken cancellationToken)
=> offline.ClearByType(@event.Type);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ public class DapperFirstQueryRequestHandler<TResult>(
IConnectionProvider connectionProvider
) : IRequestHandler<DapperFirstQuery<TResult>, TResult>
{
public Task<TResult> Handle(DapperFirstQuery<TResult> request, CancellationToken cancellationToken)
=> connectionProvider
.Create(request)
.QueryBuilder(request.Sql)
.QueryFirstOrDefaultAsync<TResult>(
commandTimeout: request.CommandTimeout,
cancellationToken: cancellationToken
);
public Task<TResult> Handle(
DapperFirstQuery<TResult> request,
RequestContext<DapperFirstQuery<TResult>> context,
CancellationToken cancellationToken
) => connectionProvider
.Create(request)
.QueryBuilder(request.Sql)
.QueryFirstOrDefaultAsync<TResult>(
commandTimeout: request.CommandTimeout,
cancellationToken: cancellationToken
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ public class DapperQueryRequestHandler<TResult>(
IConnectionProvider connectionProvider
) : IRequestHandler<DapperQuery<TResult>, IEnumerable<TResult>>
{
public Task<IEnumerable<TResult>> Handle(DapperQuery<TResult> request, CancellationToken cancellationToken)
=> connectionProvider
.Create(request)
.QueryBuilder(request.Sql)
.QueryAsync<TResult>(
null,
request.CommandTimeout,
cancellationToken: cancellationToken
);
public Task<IEnumerable<TResult>> Handle(
DapperQuery<TResult> request,
RequestContext<DapperQuery<TResult>> context,
CancellationToken cancellationToken
) => connectionProvider
.Create(request)
.QueryBuilder(request.Sql)
.QueryAsync<TResult>(
null,
request.CommandTimeout,
cancellationToken: cancellationToken
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Shiny.Mediator.DapperRequests.Handlers;

public class DapperScalarRequestHandler(IConnectionProvider connectionProvider) : IRequestHandler<DapperScalar, object>
{
public Task<object> Handle(DapperScalar request, CancellationToken cancellationToken)
public Task<object> Handle(DapperScalar request, RequestContext<DapperScalar> context, CancellationToken cancellationToken)
=> connectionProvider
.Create(request)
.QueryBuilder(request.Sql)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@ public class FlushStoreEventHandlers(ICacheService cache) :
IEventHandler<FlushStoreByRequestEvent>,
IEventHandler<FlushStoreByTypeEvent>
{
public Task Handle(FlushAllStoresEvent @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(FlushAllStoresEvent @event, EventContext<FlushAllStoresEvent> context, CancellationToken cancellationToken)
{
cache.Clear();
return Task.CompletedTask;
}

public Task Handle(FlushStoreByRequestEvent @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(FlushStoreByRequestEvent @event, EventContext<FlushStoreByRequestEvent> context, CancellationToken cancellationToken)
{
var requestkey = Utils.GetRequestKey(@event.Request);
cache.Remove(requestkey);
return Task.CompletedTask;
}

public Task Handle(FlushStoreByTypeEvent @event, EventContext context, CancellationToken cancellationToken)
public Task Handle(FlushStoreByTypeEvent @event, EventContext<FlushStoreByTypeEvent> context, CancellationToken cancellationToken)
{
var t = @event.Type;
var startsWith = $"{t.Namespace}.{t.Name}";
Expand Down
10 changes: 9 additions & 1 deletion src/Shiny.Mediator/CommandContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,15 @@ public class CommandContext(ICommandHandler handler, ICommand command)
public Guid CommandId { get; }= Guid.NewGuid();
public IReadOnlyDictionary<string, object> Values => this.store.ToDictionary();
public void Add(string key, object value) => this.store.Add(key, value);



public ICommand Command => command;
public ICommandHandler Handler => handler;
}

public class CommandContext<TCommand>(ICommandHandler<TCommand> handler, TCommand command) : CommandContext(handler, command)
where TCommand : ICommand
{
public new TCommand Command => command;
public new ICommandHandler<TCommand> Handler => handler;
}
6 changes: 6 additions & 0 deletions src/Shiny.Mediator/EventAggregatedContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Shiny.Mediator;

public class EventAggregatedContext<TEvent>(IReadOnlyList<EventContext<TEvent>> contexts) where TEvent : IEvent
{
public IReadOnlyList<EventContext<TEvent>> HandlerExecutions => contexts;
}
6 changes: 0 additions & 6 deletions src/Shiny.Mediator/EventAggregatedExecutionContext.cs

This file was deleted.

2 changes: 1 addition & 1 deletion src/Shiny.Mediator/Http/HttpRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ IEnumerable<IHttpRequestDecorator<TRequest, TResult>> decorators
readonly HttpClient httpClient = new();


public async Task<TResult> Handle(TRequest request, CancellationToken cancellationToken)
public async Task<TResult> Handle(TRequest request, RequestContext<TRequest> context, CancellationToken cancellationToken)
{
var http = request.GetType().GetCustomAttribute<HttpAttribute>();
if (http == null)
Expand Down
3 changes: 1 addition & 2 deletions src/Shiny.Mediator/ICommandMiddleware.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ namespace Shiny.Mediator;
public interface ICommandMiddleware<TCommand> where TCommand : ICommand
{
Task Process(
TCommand command,
CommandContext context,
CommandContext<TCommand> context,
CommandHandlerDelegate next,
CancellationToken cancellationToken
);
Expand Down
4 changes: 2 additions & 2 deletions src/Shiny.Mediator/IEventHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ namespace Shiny.Mediator;
///
/// </summary>
/// <typeparam name="TEvent"></typeparam>
public interface IEventHandler<in TEvent> where TEvent : IEvent
public interface IEventHandler<TEvent> where TEvent : IEvent
{
/// <summary>
/// /
/// </summary>
/// <param name="event"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task Handle(TEvent @event, EventContext context, CancellationToken cancellationToken);
Task Handle(TEvent @event, EventContext<TEvent> context, CancellationToken cancellationToken);
}
6 changes: 3 additions & 3 deletions src/Shiny.Mediator/IMediator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Task<RequestResult<TResult>> RequestWithContext<TResult>(
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<CommandContext> Send<TCommand>(
Task<CommandContext<TCommand>> Send<TCommand>(
TCommand request,
CancellationToken cancellationToken = default
) where TCommand : ICommand;
Expand All @@ -46,7 +46,7 @@ RequestResult<IAsyncEnumerable<TResult>> RequestWithContext<TResult>(
/// <param name="cancellationToken"></param>
/// <typeparam name="TEvent"></typeparam>
/// <returns></returns>
Task<EventAggregatedExecutionContext<TEvent>> Publish<TEvent>(
Task<EventAggregatedContext<TEvent>> Publish<TEvent>(
TEvent @event,
CancellationToken cancellationToken = default,
bool executeInParallel = true
Expand All @@ -59,6 +59,6 @@ Task<EventAggregatedExecutionContext<TEvent>> Publish<TEvent>(
/// <typeparam name="TEvent"></typeparam>
/// <returns></returns>
IDisposable Subscribe<TEvent>(
Func<TEvent, EventContext, CancellationToken, Task> action
Func<TEvent, EventContext<TEvent>, CancellationToken, Task> action
) where TEvent : IEvent;
}
2 changes: 1 addition & 1 deletion src/Shiny.Mediator/IRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ public interface IRequestHandler { }

public interface IRequestHandler<TRequest, TResult> : IRequestHandler where TRequest : IRequest<TResult>
{
Task<TResult> Handle(TRequest request, CancellationToken cancellationToken);
Task<TResult> Handle(TRequest request, RequestContext<TRequest> context, CancellationToken cancellationToken);
}
5 changes: 2 additions & 3 deletions src/Shiny.Mediator/Infrastructure/Impl/Mediator_Commands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Shiny.Mediator.Infrastructure.Impl;

public partial class Mediator
{
public async Task<CommandContext> Send<TCommand>(
public async Task<CommandContext<TCommand>> Send<TCommand>(
TCommand command,
CancellationToken cancellationToken = default
) where TCommand : ICommand
Expand All @@ -16,7 +16,7 @@ public async Task<CommandContext> Send<TCommand>(
if (commandHandler == null)
throw new InvalidOperationException("No command handler found for " + command.GetType().FullName);

var context = new CommandContext(commandHandler, command);
var context = new CommandContext<TCommand>(commandHandler, command);
var logger = scope.ServiceProvider.GetRequiredService<ILogger<TCommand>>();
var handlerExec = new CommandHandlerDelegate(async () =>
{
Expand All @@ -42,7 +42,6 @@ await middlewares
);

return middleware.Process(
command,
context,
next,
cancellationToken
Expand Down
6 changes: 3 additions & 3 deletions src/Shiny.Mediator/Infrastructure/Impl/Mediator_Events.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public partial class Mediator
{
readonly SubscriptionEventCollector subscriptions = new();

public virtual async Task<EventAggregatedExecutionContext<TEvent>> Publish<TEvent>(
public virtual async Task<EventAggregatedContext<TEvent>> Publish<TEvent>(
TEvent @event,
CancellationToken cancellationToken = default,
bool executeInParallel = true
Expand All @@ -28,7 +28,7 @@ public virtual async Task<EventAggregatedExecutionContext<TEvent>> Publish<TEven
AppendHandlersIf(handlers, collector);

var list = new List<EventContext<TEvent>>();
var context = new EventAggregatedExecutionContext<TEvent>(list);
var context = new EventAggregatedContext<TEvent>(list);

if (handlers.Count == 0)
return context;
Expand Down Expand Up @@ -67,7 +67,7 @@ await Task
return context;
}

public IDisposable Subscribe<TEvent>(Func<TEvent, EventContext, CancellationToken, Task> action) where TEvent : IEvent
public IDisposable Subscribe<TEvent>(Func<TEvent, EventContext<TEvent>, CancellationToken, Task> action) where TEvent : IEvent
{
var handler = new SubscriptionEventHandler<TEvent>(this.subscriptions);
handler.OnHandle = action;
Expand Down
Loading

0 comments on commit ebfd808

Please sign in to comment.