diff --git a/TimetableDesigner.Backend.Events/BuilderExtensions.cs b/TimetableDesigner.Backend.Events/BuilderExtensions.cs new file mode 100644 index 0000000..c36d41d --- /dev/null +++ b/TimetableDesigner.Backend.Events/BuilderExtensions.cs @@ -0,0 +1,21 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace TimetableDesigner.Backend.Events; + +public static class BuilderExtensions +{ + public static IServiceCollection AddEventQueue(this IServiceCollection services, Action configuration) where T : EventQueue, new() + { + T builder = new T(); + configuration(builder); + builder.Setup(services); + return services; + } + + public static void AddEventHandler(this WebApplication app, Func handler) where T : class + { + IEventQueueSubscriber subscriber = app.Services.GetService()!; + subscriber.Subscribe(handler); + } +} \ No newline at end of file diff --git a/TimetableDesigner.Backend.Events/Class1.cs b/TimetableDesigner.Backend.Events/Class1.cs deleted file mode 100644 index fb93bc8..0000000 --- a/TimetableDesigner.Backend.Events/Class1.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace TimetableDesigner.Backend.Events; - -public class Class1 -{ -} \ No newline at end of file diff --git a/TimetableDesigner.Backend.Events/EventQueue.cs b/TimetableDesigner.Backend.Events/EventQueue.cs new file mode 100644 index 0000000..a4d11a0 --- /dev/null +++ b/TimetableDesigner.Backend.Events/EventQueue.cs @@ -0,0 +1,8 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace TimetableDesigner.Backend.Events; + +public abstract class EventQueue +{ + internal abstract void Setup(IServiceCollection services); +} \ No newline at end of file diff --git a/TimetableDesigner.Backend.Events/IEventQueuePublisher.cs b/TimetableDesigner.Backend.Events/IEventQueuePublisher.cs new file mode 100644 index 0000000..44798a1 --- /dev/null +++ b/TimetableDesigner.Backend.Events/IEventQueuePublisher.cs @@ -0,0 +1,6 @@ +namespace TimetableDesigner.Backend.Events; + +public interface IEventQueuePublisher +{ + public Task PublishAsync(T data) where T : class; +} \ No newline at end of file diff --git a/TimetableDesigner.Backend.Events/IEventQueueSubscriber.cs b/TimetableDesigner.Backend.Events/IEventQueueSubscriber.cs new file mode 100644 index 0000000..13fbbcc --- /dev/null +++ b/TimetableDesigner.Backend.Events/IEventQueueSubscriber.cs @@ -0,0 +1,6 @@ +namespace TimetableDesigner.Backend.Events; + +public interface IEventQueueSubscriber +{ + void Subscribe(Func handler) where T : class; +} \ No newline at end of file diff --git a/TimetableDesigner.Backend.Events/TimetableDesigner.Backend.Events.csproj b/TimetableDesigner.Backend.Events/TimetableDesigner.Backend.Events.csproj index 237d661..08b58a6 100644 --- a/TimetableDesigner.Backend.Events/TimetableDesigner.Backend.Events.csproj +++ b/TimetableDesigner.Backend.Events/TimetableDesigner.Backend.Events.csproj @@ -6,4 +6,15 @@ enable + + + + + + + + C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\10.0.2\Microsoft.AspNetCore.dll + + +