Skip to content

Commit

Permalink
Updated Marten aggregates to have Version applied by convention
Browse files Browse the repository at this point in the history
  • Loading branch information
oskardudycz committed May 28, 2022
1 parent 96a4c22 commit 7b95e6f
Show file tree
Hide file tree
Showing 19 changed files with 24 additions and 73 deletions.
23 changes: 14 additions & 9 deletions Core.Marten/Repository/MartenRepository.cs
Expand Up @@ -8,8 +8,12 @@ public interface IMartenRepository<T> where T : class, IAggregate
{
Task<T?> Find(Guid id, CancellationToken cancellationToken);
Task<long> Add(T aggregate, TraceMetadata? eventMetadata = null, CancellationToken cancellationToken = default);
Task<long> Update(T aggregate, long? expectedVersion = null, TraceMetadata? traceMetadata = null, CancellationToken cancellationToken = default);
Task<long> Delete(T aggregate, long? expectedVersion = null, TraceMetadata? eventMetadata = null, CancellationToken cancellationToken = default);

Task<long> Update(T aggregate, long? expectedVersion = null, TraceMetadata? traceMetadata = null,
CancellationToken cancellationToken = default);

Task<long> Delete(T aggregate, long? expectedVersion = null, TraceMetadata? eventMetadata = null,
CancellationToken cancellationToken = default);
}

public class MartenRepository<T>: IMartenRepository<T> where T : class, IAggregate
Expand All @@ -26,7 +30,8 @@ IDocumentSession documentSession
public Task<T?> Find(Guid id, CancellationToken cancellationToken) =>
documentSession.Events.AggregateStreamAsync<T>(id, token: cancellationToken);

public async Task<long> Add(T aggregate, TraceMetadata? traceMetadata = null, CancellationToken cancellationToken = default)
public async Task<long> Add(T aggregate, TraceMetadata? traceMetadata = null,
CancellationToken cancellationToken = default)
{
documentSession.CorrelationId = traceMetadata?.CorrelationId?.Value;
documentSession.CausationId = traceMetadata?.CausationId?.Value;
Expand All @@ -43,20 +48,19 @@ public async Task<long> Add(T aggregate, TraceMetadata? traceMetadata = null, Ca
return events.Length;
}

public async Task<long> Update(T aggregate, long? expectedVersion = null, TraceMetadata? traceMetadata = null, CancellationToken cancellationToken = default)
public async Task<long> Update(T aggregate, long? expectedVersion = null, TraceMetadata? traceMetadata = null,
CancellationToken cancellationToken = default)
{
documentSession.CorrelationId = traceMetadata?.CorrelationId?.Value;
documentSession.CausationId = traceMetadata?.CausationId?.Value;

var events = aggregate.DequeueUncommittedEvents();

var nextVersion = expectedVersion.HasValue ?
expectedVersion.Value + events.Length
: aggregate.Version;
var nextVersion = (expectedVersion ?? aggregate.Version) + events.Length;

documentSession.Events.Append(
aggregate.Id,
aggregate.Version,
nextVersion,
events
);

Expand All @@ -65,6 +69,7 @@ public async Task<long> Update(T aggregate, long? expectedVersion = null, TraceM
return nextVersion;
}

public Task<long> Delete(T aggregate, long? expectedVersion = null, TraceMetadata? traceMetadata = null, CancellationToken cancellationToken = default) =>
public Task<long> Delete(T aggregate, long? expectedVersion = null, TraceMetadata? traceMetadata = null,
CancellationToken cancellationToken = default) =>
Update(aggregate, expectedVersion, traceMetadata, cancellationToken);
}
4 changes: 0 additions & 4 deletions Marten.Integration.Tests/CompositeIds/CompositeIdsTests.cs
Expand Up @@ -224,25 +224,21 @@ public void Apply(TentativeReservationCreated @event)
CustomerId = @event.CustomerId;
Number = @event.Number;
Status = ReservationStatus.Tentative;
Version++;
}

public void Apply(ReservationSeatChanged @event)
{
SeatId = @event.SeatId;
Version++;
}

public void Apply(ReservationConfirmed @event)
{
Status = ReservationStatus.Confirmed;
Version++;
}

public void Apply(ReservationCancelled @event)
{
Status = ReservationStatus.Cancelled;
Version++;
}
}

Expand Down
Expand Up @@ -23,12 +23,11 @@ public void ForTentativeCart_ShouldSucceed()

// Then
cart.Status.Should().Be(ShoppingCartStatus.Confirmed);
cart.Version.Should().Be(2);

var @event = cart.PublishedEvent<ShoppingCartConfirmed>();

@event.Should().NotBeNull();
@event.Should().BeOfType<ShoppingCartConfirmed>();
@event!.CartId.Should().Be(cart.Id);
}
}
}
Expand Up @@ -18,7 +18,6 @@ internal static class CartExtensions
shoppingCart.Status.Should().Be(ShoppingCartStatus.Pending);
shoppingCart.ProductItems.Should().BeEmpty();
shoppingCart.TotalPrice.Should().Be(0);
shoppingCart.Version.Should().Be(1);

return shoppingCart;
}
Expand Down
Expand Up @@ -24,8 +24,6 @@ public class ShoppingCartDetails

public void Apply(ShoppingCartOpened @event)
{
Version++;

Id = @event.CartId;
ClientId = @event.ClientId;
ProductItems = new List<PricedProductItem>();
Expand All @@ -34,8 +32,6 @@ public void Apply(ShoppingCartOpened @event)

public void Apply(ProductAdded @event)
{
Version++;

var newProductItem = @event.ProductItem;

var existingProductItem = FindProductItemMatchingWith(newProductItem);
Expand All @@ -54,8 +50,6 @@ public void Apply(ProductAdded @event)

public void Apply(ProductRemoved @event)
{
Version++;

var productItemToBeRemoved = @event.ProductItem;

var existingProductItem = FindProductItemMatchingWith(@event.ProductItem);
Expand All @@ -77,15 +71,11 @@ public void Apply(ProductRemoved @event)

public void Apply(ShoppingCartConfirmed @event)
{
Version++;

Status = ShoppingCartStatus.Confirmed;
}

public void Apply(ShoppingCartCanceled @event)
{
Version++;

Status = ShoppingCartStatus.Canceled;
}

Expand Down
10 changes: 0 additions & 10 deletions Sample/ECommerce/Carts/Carts/ShoppingCarts/ShoppingCart.cs
Expand Up @@ -44,8 +44,6 @@ public class ShoppingCart: Aggregate

public void Apply(ShoppingCartOpened @event)
{
Version++;

Id = @event.CartId;
ClientId = @event.ClientId;
ProductItems = new List<PricedProductItem>();
Expand All @@ -69,8 +67,6 @@ public void Apply(ShoppingCartOpened @event)

public void Apply(ProductAdded @event)
{
Version++;

var newProductItem = @event.ProductItem;

var existingProductItem = FindProductItemMatchingWith(newProductItem);
Expand Down Expand Up @@ -109,8 +105,6 @@ public void Apply(ProductAdded @event)

public void Apply(ProductRemoved @event)
{
Version++;

var productItemToBeRemoved = @event.ProductItem;

var existingProductItem = FindProductItemMatchingWith(@event.ProductItem);
Expand Down Expand Up @@ -143,8 +137,6 @@ public void Confirm()

public void Apply(ShoppingCartConfirmed @event)
{
Version++;

Status = ShoppingCartStatus.Confirmed;
}

Expand All @@ -161,8 +153,6 @@ public void Cancel()

public void Apply(ShoppingCartCanceled @event)
{
Version++;

Status = ShoppingCartStatus.Canceled;
}

Expand Down
8 changes: 0 additions & 8 deletions Sample/ECommerce/Orders/Orders/Orders/Order.cs
Expand Up @@ -51,8 +51,6 @@ private Order(Guid id, Guid clientId, IReadOnlyList<PricedProductItem> productIt

public void Apply(OrderInitialized @event)
{
Version++;

Id = @event.OrderId;
ClientId = @event.ClientId;
ProductItems = @event.ProductItems;
Expand All @@ -75,8 +73,6 @@ public void RecordPayment(Guid paymentId, DateTime recordedAt)

public void Apply(OrderPaymentRecorded @event)
{
Version++;

PaymentId = @event.PaymentId;
Status = OrderStatus.Paid;
}
Expand All @@ -94,8 +90,6 @@ public void Complete()

public void Apply(OrderCompleted @event)
{
Version++;

Status = OrderStatus.Completed;
}

Expand All @@ -112,8 +106,6 @@ public void Cancel(OrderCancellationReason cancellationReason)

public void Apply(OrderCancelled @event)
{
Version++;

Status = OrderStatus.Cancelled;
}
}
10 changes: 1 addition & 9 deletions Sample/ECommerce/Payments/Payments/Payments/Payment.cs
Expand Up @@ -31,8 +31,6 @@ private Payment(Guid id, Guid orderId, decimal amount)

public void Apply(PaymentRequested @event)
{
Version++;

Id = @event.PaymentId;
OrderId = @event.OrderId;
Amount = @event.Amount;
Expand All @@ -51,8 +49,6 @@ public void Complete()

public void Apply(PaymentCompleted @event)
{
Version++;

Status = PaymentStatus.Completed;
}

Expand All @@ -69,8 +65,6 @@ public void Discard(DiscardReason discardReason)

public void Apply(PaymentDiscarded @event)
{
Version++;

Status = PaymentStatus.Failed;
}

Expand All @@ -87,8 +81,6 @@ public void TimeOut()

public void Apply(PaymentTimedOut @event)
{
Version++;

Status = PaymentStatus.Failed;
}
}
}
Expand Up @@ -41,8 +41,6 @@ public void Apply(MeetingCreated @event)
Id = @event.MeetingId;
Name = @event.Name;
Created = @event.Created;

Version++;
}

internal void Schedule(DateRange occurs)
Expand All @@ -56,7 +54,5 @@ internal void Schedule(DateRange occurs)
public void Apply(MeetingScheduled @event)
{
Occurs = @event.Occurs;

Version++;
}
}
Expand Up @@ -17,7 +17,6 @@ internal static class ReservationExtensions
reservation.Id.Should().Be(id);
reservation.Number.Should().Be(number);
reservation.SeatId.Should().Be(seatId);
reservation.Version.Should().Be(1);

return reservation;
}
Expand All @@ -38,4 +37,4 @@ internal static class ReservationExtensions

return reservation;
}
}
}
Expand Up @@ -23,7 +23,6 @@ public void ForTentativeReservation_ShouldSucceed()

// Then
reservation.Status.Should().Be(ReservationStatus.Cancelled);
reservation.Version.Should().Be(2);

var @event = reservation.PublishedEvent<ReservationCancelled>();

Expand All @@ -43,4 +42,4 @@ public void ForCancelledReservation_ShouldFailWithInvalidOperation()
{

}
}
}
Expand Up @@ -24,7 +24,6 @@ public void ForValidParams_UpdatesSeatId()

// Then
reservation.SeatId.Should().Be(newSeatId);
reservation.Version.Should().Be(2);

var @event = reservation.PublishedEvent<ReservationSeatChanged>();

Expand All @@ -33,4 +32,4 @@ public void ForValidParams_UpdatesSeatId()
@event!.ReservationId.Should().Be(reservation.Id);
@event.SeatId.Should().Be(newSeatId);
}
}
}
Expand Up @@ -23,12 +23,11 @@ public void ForTentativeReservation_ShouldSucceed()

// Then
reservation.Status.Should().Be(ReservationStatus.Confirmed);
reservation.Version.Should().Be(2);

var @event = reservation.PublishedEvent<ReservationConfirmed>();

@event.Should().NotBeNull();
@event.Should().BeOfType<ReservationConfirmed>();
@event!.ReservationId.Should().Be(reservation.Id);
}
}
}
Expand Up @@ -24,25 +24,21 @@ public void Apply(TentativeReservationCreated @event)
SeatId = @event.SeatId;
Number = @event.Number;
Status = ReservationStatus.Tentative;
Version++;
}

public void Apply(ReservationSeatChanged @event)
{
SeatId = @event.SeatId;
Version++;
}

public void Apply(ReservationConfirmed @event)
{
Status = ReservationStatus.Confirmed;
Version++;
}

public void Apply(ReservationCancelled @event)
{
Status = ReservationStatus.Cancelled;
Version++;
}
}

Expand Down
4 changes: 0 additions & 4 deletions Sample/Tickets/Tickets/Reservations/Reservation.cs
Expand Up @@ -94,24 +94,20 @@ public void Apply(TentativeReservationCreated @event)
SeatId = @event.SeatId;
Number = @event.Number;
Status = ReservationStatus.Tentative;
Version++;
}

public void Apply(ReservationSeatChanged @event)
{
SeatId = @event.SeatId;
Version++;
}

public void Apply(ReservationConfirmed @event)
{
Status = ReservationStatus.Confirmed;
Version++;
}

public void Apply(ReservationCancelled @event)
{
Status = ReservationStatus.Cancelled;
Version++;
}
}

0 comments on commit 7b95e6f

Please sign in to comment.