Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [ main, develop ]
branches: [ main ]
pull_request:
branches: [ main, develop ]
branches: [ main ]

jobs:
build-and-test:
Expand Down
7 changes: 0 additions & 7 deletions UltraSpeedBus.Abstractions/Contexts/IConsumerContext.cs

This file was deleted.

13 changes: 0 additions & 13 deletions UltraSpeedBus.Abstractions/Contexts/IMessageContext.cs

This file was deleted.

7 changes: 0 additions & 7 deletions UltraSpeedBus.Abstractions/Contexts/ISendContext.cs

This file was deleted.

3 changes: 3 additions & 0 deletions UltraSpeedBus.Abstractions/Message/ICommand.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
namespace UltraSpeedBus.Abstractions.Message;

/// <summary>
/// Command message marker interface
/// </summary>
public interface ICommand : IMessage {}
7 changes: 7 additions & 0 deletions UltraSpeedBus.Abstractions/Message/ICommandHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace UltraSpeedBus.Abstractions.Message;

public interface ICommandHandler<TCommand>
where TCommand : ICommand
{
Task HandleAsync(TCommand command, CancellationToken cancellationToken);
}
6 changes: 0 additions & 6 deletions UltraSpeedBus.Abstractions/Message/ICorrelatedMessage.cs

This file was deleted.

3 changes: 3 additions & 0 deletions UltraSpeedBus.Abstractions/Message/IEvent.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
namespace UltraSpeedBus.Abstractions.Message;

/// <summary>
/// Event message marker interface
/// </summary>
public interface IEvent : IMessage {}
7 changes: 7 additions & 0 deletions UltraSpeedBus.Abstractions/Message/IEventHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace UltraSpeedBus.Abstractions.Message;

public interface IEventHandler<TEvent>
where TEvent : IEvent
{
Task HandleAsync(TEvent @event, CancellationToken cancellationToken);
}
42 changes: 7 additions & 35 deletions UltraSpeedBus.Abstractions/Message/IMessage.cs
Original file line number Diff line number Diff line change
@@ -1,42 +1,14 @@
namespace UltraSpeedBus.Abstractions.Message;

// Message base interface
public interface IMessage
{
/// <summary>
/// It will be used for Saga, Idempotency, etc.
/// </summary>
Guid MessageId { get; }
DateTime Timestamp { get; }

}

// Pipelines and middlewares
public interface IMessageMiddleware
{
}

public interface IPublishPipeline
{
}

public interface IConsumerPipeline
{
}

// Policies and erros
public interface IErrorHandler
{
}

public interface IRetryPolicy
{
}

public interface IExceptionFilter
{

}

// Telemetry - it will be integrated with OpenTelemetry
public interface ITracerAdapter
{

/// <summary>
/// It will be used for logging, tracing, etc.
/// </summary>
DateTime Timestamp { get; }
}
3 changes: 3 additions & 0 deletions UltraSpeedBus.Abstractions/Message/IQuery.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace UltraSpeedBus.Abstractions.Message;

public interface IQuery<TResult> : IMessage {}
7 changes: 7 additions & 0 deletions UltraSpeedBus.Abstractions/Message/IQueryHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace UltraSpeedBus.Abstractions.Message;

public interface IQueryHandler<TQuery, TResult>
where TQuery : IQuery<TResult>
{
Task HandleAsync(TQuery query, CancellationToken cancellationToken);
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The IQueryHandler interface has HandleAsync returning Task but it should return Task<TResult> since queries are expected to return results.

Suggested change
Task HandleAsync(TQuery query, CancellationToken cancellationToken);
Task<TResult> HandleAsync(TQuery query, CancellationToken cancellationToken);

Copilot uses AI. Check for mistakes.
}
6 changes: 0 additions & 6 deletions UltraSpeedBus.Abstractions/Message/IScheduledMessage.cs

This file was deleted.

18 changes: 0 additions & 18 deletions UltraSpeedBus.Abstractions/Message/MessageEnvelope.cs

This file was deleted.

5 changes: 0 additions & 5 deletions UltraSpeedBus.Abstractions/Sagas/ISagaContext.cs

This file was deleted.

5 changes: 0 additions & 5 deletions UltraSpeedBus.Abstractions/Sagas/ISagaRepository.cs

This file was deleted.

6 changes: 0 additions & 6 deletions UltraSpeedBus.Abstractions/Sagas/ISagaState.cs

This file was deleted.

10 changes: 0 additions & 10 deletions UltraSpeedBus.Abstractions/Serializer/IMessageSerializer.cs

This file was deleted.

29 changes: 0 additions & 29 deletions UltraSpeedBus.Abstractions/Transport/ConsumerTransportContext.cs

This file was deleted.

7 changes: 7 additions & 0 deletions UltraSpeedBus.Abstractions/Transport/ITransport.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace UltraSpeedBus.Abstractions.Message;
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ITransport interface is declared in the UltraSpeedBus.Abstractions.Message namespace but is located in the Transport folder. This should use the UltraSpeedBus.Abstractions.Transport namespace for consistency with its file location.

Suggested change
namespace UltraSpeedBus.Abstractions.Message;
namespace UltraSpeedBus.Abstractions.Transport;

Copilot uses AI. Check for mistakes.

public interface ITransport
{
ITransportProducer CreateProducer();
ITransportConsumer CreateConsumer(string queueOrTopic);
}
22 changes: 19 additions & 3 deletions UltraSpeedBus.Abstractions/Transport/ITransportConsumer.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,23 @@
namespace UltraSpeedBus.Abstractions.Transport;
namespace UltraSpeedBus.Abstractions.Message;
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConsumerTransportContext, ITransportConsumer classes/interfaces are declared in the UltraSpeedBus.Abstractions.Message namespace but are located in the Transport folder. These should use the UltraSpeedBus.Abstractions.Transport namespace for consistency with their file location.

Suggested change
namespace UltraSpeedBus.Abstractions.Message;
namespace UltraSpeedBus.Abstractions.Transport;

Copilot uses AI. Check for mistakes.

/// <summary>
/// Represents a transport-agnostic consumer interface that supports multiple message consumption patterns:
/// - Long polling (e.g., AWS SQS)
/// - Push-based delivery (e.g., Azure Service Bus)
/// - Subscription streaming (e.g., Apache Kafka)
/// - Polling loop (e.g., Redis Streams)
/// </summary>
public interface ITransportConsumer : IAsyncDisposable
{
Task StartAsync(Func<ConsumerTransportContext, Task> onMessage, CancellationToken cancellationToken = default);
Task StopAsync(CancellationToken cancellationToken = default);
Task InitializeAsync(CancellationToken cancellationToken = default);

Task StartConsumingAsync(
Func<ConsumerTransportContext, Task> handler,
CancellationToken cancellationToken = default);

Task StopConsumingAsync(CancellationToken cancellationToken = default);
}

public class ConsumerTransportContext
{
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConsumerTransportContext class is empty and has no properties or methods. This makes it unusable for passing context information to message handlers. It should include at minimum the MessageEnvelope and methods for message completion/abandonment similar to the deleted version.

Suggested change
{
{
/// <summary>
/// The envelope containing the message and metadata.
/// </summary>
public MessageEnvelope Envelope { get; }
private readonly Func<Task> _completeAsync;
private readonly Func<Task> _abandonAsync;
/// <summary>
/// Initializes a new instance of the <see cref="ConsumerTransportContext"/> class.
/// </summary>
/// <param name="envelope">The message envelope.</param>
/// <param name="completeAsync">Delegate to complete the message.</param>
/// <param name="abandonAsync">Delegate to abandon the message.</param>
public ConsumerTransportContext(
MessageEnvelope envelope,
Func<Task> completeAsync,
Func<Task> abandonAsync)
{
Envelope = envelope;
_completeAsync = completeAsync ?? throw new ArgumentNullException(nameof(completeAsync));
_abandonAsync = abandonAsync ?? throw new ArgumentNullException(nameof(abandonAsync));
}
/// <summary>
/// Marks the message as successfully processed.
/// </summary>
public Task CompleteAsync() => _completeAsync();
/// <summary>
/// Abandons the message, indicating it was not processed successfully.
/// </summary>
public Task AbandonAsync() => _abandonAsync();

Copilot uses AI. Check for mistakes.
}
Comment on lines +21 to +23
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConsumerTransportContext class is defined in ITransportConsumer.cs, but should be in its own file ConsumerTransportContext.cs for better code organization and maintainability.

Copilot uses AI. Check for mistakes.
22 changes: 15 additions & 7 deletions UltraSpeedBus.Abstractions/Transport/ITransportProducer.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
using UltraSpeedBus.Abstractions.Message;
namespace UltraSpeedBus.Abstractions.Message;
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MessageEnvelope, ITransportProducer, ITransportConsumer, ConsumerTransportContext, and ITransport classes/interfaces are declared in the UltraSpeedBus.Abstractions.Message namespace but are located in the Transport folder. These should use the UltraSpeedBus.Abstractions.Transport namespace for consistency with their file location.

Suggested change
namespace UltraSpeedBus.Abstractions.Message;
namespace UltraSpeedBus.Abstractions.Transport;

Copilot uses AI. Check for mistakes.

namespace UltraSpeedBus.Abstractions.Transport;
public class MessageEnvelope
{
public Guid MessageId { get; init; }
public string MessageType { get; init; } = null!;
public byte[] Payload { get; init; } = null!;
}
Comment on lines +3 to +8
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MessageEnvelope class is defined in ITransportProducer.cs, but should be in its own file MessageEnvelope.cs in the Message folder for better code organization and maintainability.

Copilot uses AI. Check for mistakes.

/// <summary>
/// Defines a transport producer capable of sending and publishing messages.
/// it will be used for Azure Service Bus, AWS, RabbitMQ fanout, SQS, Redis Streams, etc.
/// </summary>
public interface ITransportProducer : IAsyncDisposable
{
Task StartAsync(CancellationToken cancellationToken = default);
Task StopAsync(CancellationToken cancellationToken = default);
Task InitializeAsync(CancellationToken cancellationToken = default);

Task SendAsync(MessageEnvelope envolope, CancellationToken cancellationToken = default);
Task PublishAsync(MessageEnvelope envolope, CancellationToken cancellationToken = default);
}
Task SendAsync(string queue, MessageEnvelope envelop, CancellationToken cancellationToken = default);
Task PublishAsync(string topic, MessageEnvelope envelop, CancellationToken cancellationToken = default);
Comment on lines +18 to +19
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spelling error: 'envolope' should be 'envelope'.

Suggested change
Task SendAsync(string queue, MessageEnvelope envelop, CancellationToken cancellationToken = default);
Task PublishAsync(string topic, MessageEnvelope envelop, CancellationToken cancellationToken = default);
Task SendAsync(string queue, MessageEnvelope envelope, CancellationToken cancellationToken = default);
Task PublishAsync(string topic, MessageEnvelope envelope, CancellationToken cancellationToken = default);

Copilot uses AI. Check for mistakes.
Comment on lines +18 to +19
Copy link

Copilot AI Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spelling error: 'envolope' should be 'envelope'.

Suggested change
Task SendAsync(string queue, MessageEnvelope envelop, CancellationToken cancellationToken = default);
Task PublishAsync(string topic, MessageEnvelope envelop, CancellationToken cancellationToken = default);
Task SendAsync(string queue, MessageEnvelope envelope, CancellationToken cancellationToken = default);
Task PublishAsync(string topic, MessageEnvelope envelope, CancellationToken cancellationToken = default);

Copilot uses AI. Check for mistakes.
}
8 changes: 0 additions & 8 deletions UltraSpeedBus.Abstractions/Transport/ITransportTopology.cs

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Binary file not shown.
Loading