Skip to content

Instantly share code, notes, and snippets.

View moostafaa's full-sized avatar
😊

Mostafa moostafaa

😊
View GitHub Profile
@moostafaa
moostafaa / SagaWithOutboxPattern.cs
Created December 30, 2025 14:15
Saga With outbox pattern
//Saga Events
public record OrderCreatedEvent(Guid OrderId, int ProductId, int Quantity, decimal Amount, string CustomerId);
public record StockReservedEvent(Guid OrderId, int ProductId, int Quantity);
public record StockReservationFailedEvent(Guid OrderId, string Reason);
public record OrderConfirmedEvent(Guid OrderId);
public record OrderCancelledEvent(Guid OrderId, string Reason);
public record StockReleaseRequestedEvent(Guid OrderId, int ProductId, int Quantity);
public class OutboxMessage
{
@moostafaa
moostafaa / TwoPhaseCommit.cs
Created December 30, 2025 13:53
Two phase sample implementation
public interface ITransactionParticipant
{
Task<PrepareResult> PrepareAsync(Guid transactionId, TransactionContext context);
Task CommitAsync(Guid transactionId);
Task RollbackAsync(Guid transactionId);
}
public enum PrepareResult
{
Prepared,
public class SaleDocument
{
....
public decimal GetDiscerpancyAmount(ISpecification<SaleDocument> spec) =>
spec.IsSatisfiedBy(this) ? ConfirmedPrice - DocumentNetPrice : 0;
....
}
public class SaleDocumentService
{
public decimal GetDiscerpancyAmount(ISpecification<SaleDocument> spec) =>
spec.IsSatisfiedBy(this) ? ConfirmedPrice - DocumentNetPrice : 0;
public class OrderWithoutInvoiceSpecification : Specification<SaleDocument>
{
...
}
public class ApprovedOrderWithoutInvoiceSpecification : AndSpecification<SaleDocument>
{
public ApprovedOrderWithoutInvoiceSpecification()
: base(new ApprovedOrderSpecification(), new OrderWithoutInvoiceSpecification())
{}
}