diff --git a/back/src/Kyoo.RabbitMq/RabbitProducer.cs b/back/src/Kyoo.RabbitMq/RabbitProducer.cs index e434989a..51959a0a 100644 --- a/back/src/Kyoo.RabbitMq/RabbitProducer.cs +++ b/back/src/Kyoo.RabbitMq/RabbitProducer.cs @@ -32,43 +32,31 @@ public class RabbitProducer { _channel = rabbitConnection.CreateModel(); - _channel.ExchangeDeclare(exchange: "events.resource.collection", type: ExchangeType.Fanout); - IRepository.OnCreated += _Publish("events.resource.collection", "created"); - IRepository.OnEdited += _Publish("events.resource.collection", "edited"); - IRepository.OnDeleted += _Publish("events.resource.collection", "deleted"); - - _channel.ExchangeDeclare(exchange: "events.resource.movie", type: ExchangeType.Fanout); - IRepository.OnCreated += _Publish("events.resource.movie", "created"); - IRepository.OnEdited += _Publish("events.resource.movie", "edited"); - IRepository.OnDeleted += _Publish("events.resource.movie", "deleted"); - - _channel.ExchangeDeclare(exchange: "events.resource.show", type: ExchangeType.Fanout); - IRepository.OnCreated += _Publish("events.resource.show", "created"); - IRepository.OnEdited += _Publish("events.resource.show", "edited"); - IRepository.OnDeleted += _Publish("events.resource.show", "deleted"); - - _channel.ExchangeDeclare(exchange: "events.resource.season", type: ExchangeType.Fanout); - IRepository.OnCreated += _Publish("events.resource.season", "created"); - IRepository.OnEdited += _Publish("events.resource.season", "edited"); - IRepository.OnDeleted += _Publish("events.resource.season", "deleted"); - - _channel.ExchangeDeclare(exchange: "events.resource.episode", type: ExchangeType.Fanout); - IRepository.OnCreated += _Publish("events.resource.episode", "created"); - IRepository.OnEdited += _Publish("events.resource.episode", "edited"); - IRepository.OnDeleted += _Publish("events.resource.episode", "deleted"); - - _channel.ExchangeDeclare(exchange: "events.resource.studio", type: ExchangeType.Fanout); - IRepository.OnCreated += _Publish("events.resource.studio", "created"); - IRepository.OnEdited += _Publish("events.resource.studio", "edited"); - IRepository.OnDeleted += _Publish("events.resource.studio", "deleted"); - - _channel.ExchangeDeclare(exchange: "events.resource.user", type: ExchangeType.Fanout); - IRepository.OnCreated += _Publish("events.resource.user", "created"); - IRepository.OnEdited += _Publish("events.resource.user", "edited"); - IRepository.OnDeleted += _Publish("events.resource.user", "deleted"); + _channel.ExchangeDeclare("events.resource", ExchangeType.Topic); + _ListenResourceEvents("events.resource"); + _ListenResourceEvents("events.resource"); + _ListenResourceEvents("events.resource"); + _ListenResourceEvents("events.resource"); + _ListenResourceEvents("events.resource"); + _ListenResourceEvents("events.resource"); + _ListenResourceEvents("events.resource"); } - private IRepository.ResourceEventHandler _Publish(string exchange, string action) + private void _ListenResourceEvents(string exchange) + where T : IResource, IQuery + { + string type = typeof(T).Name.ToLowerInvariant(); + + IRepository.OnCreated += _Publish(exchange, type, "created"); + IRepository.OnEdited += _Publish(exchange, type, "edited"); + IRepository.OnDeleted += _Publish(exchange, type, "deleted"); + } + + private IRepository.ResourceEventHandler _Publish( + string exchange, + string type, + string action + ) where T : IResource, IQuery { return (T resource) => @@ -76,12 +64,12 @@ public class RabbitProducer var message = new { Action = action, - Type = typeof(T).Name.ToLowerInvariant(), - Value = resource, + Type = type, + Resource = resource, }; _channel.BasicPublish( exchange, - routingKey: string.Empty, + routingKey: $"{type}.{action}", body: Encoding.UTF8.GetBytes(JsonSerializer.Serialize(message)) ); return Task.CompletedTask;