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
202 changes: 102 additions & 100 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,102 +1,104 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<PropertyGroup Label="Microsoft extensions">
<MicrosoftExtensionsVer>8.0</MicrosoftExtensionsVer>
<MicrosoftHealthCheckVer>8.0.6</MicrosoftHealthCheckVer>
</PropertyGroup>
<PropertyGroup Label="Package versions for .NET 6" Condition="'$(TargetFramework)' == 'net6.0'">
<MicrosoftTestHostVer>[6.0.5,7)</MicrosoftTestHostVer>
<DiffPlexVersion>2.3.0</DiffPlexVersion>
</PropertyGroup>
<PropertyGroup Label="Package versions for .NET 8" Condition="'$(TargetFramework)' == 'net8.0'">
<MicrosoftTestHostVer>8.0.6</MicrosoftTestHostVer>
<DiffPlexVersion>3.0.0</DiffPlexVersion>
</PropertyGroup>
<PropertyGroup Label="Testcontainers version">
<TestcontainersVersion>3.9.0</TestcontainersVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="BenchmarkDotNet" Version="0.13.12"/>
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="$(MicrosoftHealthCheckVer)"/>
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(MicrosoftExtensionsVer)"/>
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="8.0.1"/>
<PackageVersion Include="System.Reactive" Version="6.0.1"/>
<PackageVersion Include="System.Linq.Async" Version="6.0.1"/>
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0"/>
<PackageVersion Include="EventStore.Client.Grpc.PersistentSubscriptions" Version="23.3.3"/>
<PackageVersion Include="EventStore.Client.Grpc.Streams" Version="23.3.3"/>
<PackageVersion Include="MongoDB.Driver" Version="2.26.0"/>
<PackageVersion Include="Google.Cloud.PubSub.V1" Version="3.14.0"/>
<PackageVersion Include="Confluent.Kafka" Version="2.4.0"/>
<PackageVersion Include="Npgsql" Version="8.0.3"/>
<PackageVersion Include="Npgsql.DependencyInjection" Version="8.0.3"/>
<PackageVersion Include="RabbitMQ.Client" Version="6.6.0"/>
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.1"/>
<PackageVersion Include="NEST" Version="7.17.5"/>
<PackageVersion Include="Polly" Version="8.4.0"/>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageVersion Include="StackExchange.Redis" Version="2.6.90"/>
<PackageVersion Include="Verify.DiffPlex" Version="$(DiffPlexVersion)"/>
</ItemGroup>
<ItemGroup Label="Testcontainers">
<PackageVersion Include="Testcontainers" Version="$(TestcontainersVersion)"/>
<PackageVersion Include="Testcontainers.EventStoreDb" Version="$(TestcontainersVersion)"/>
<PackageVersion Include="Testcontainers.Kafka" Version="$(TestcontainersVersion)"/>
<PackageVersion Include="Testcontainers.MongoDb" Version="$(TestcontainersVersion)"/>
<PackageVersion Include="Testcontainers.PostgreSql" Version="$(TestcontainersVersion)"/>
<PackageVersion Include="Testcontainers.RabbitMq" Version="$(TestcontainersVersion)"/>
<PackageVersion Include="Testcontainers.Redis" Version="$(TestcontainersVersion)"/>
<PackageVersion Include="Testcontainers.SqlEdge" Version="$(TestcontainersVersion)"/>
</ItemGroup>
<ItemGroup Label="References for packable projects">
<PackageVersion Include="MinVer" Version="5.0.0" PrivateAssets="All"/>
<PackageVersion Include="JetBrains.Annotations" Version="2023.3.0" PrivateAssets="All"/>
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All"/>
</ItemGroup>
<ItemGroup Label="References for test projects">
<PackageVersion Include="AutoFixture" Version="4.18.1"/>
<PackageVersion Include="Bogus" Version="35.5.1"/>
<PackageVersion Include="FluentAssertions" Version="6.12.0"/>
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0"/>
<PackageVersion Include="xunit" Version="2.8.1"/>
<PackageVersion Include="xunit.abstractions" Version="2.0.3"/>
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.1" PrivateAssets="All"/>
<PackageVersion Include="coverlet.collector" Version="6.0.2" PrivateAssets="All"/>
<PackageVersion Include="Xunit.Extensions.Logging" Version="1.1.0"/>
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="$(MicrosoftTestHostVer)"/>
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftTestHostVer)"/>
<PackageVersion Include="RestSharp" Version="110.2.0"/>
<PackageVersion Include="Hypothesist" Version="3.0.88"/>
<PackageVersion Include="NodaTime" Version="3.1.9"/>
<PackageVersion Include="NodaTime.Serialization.SystemTextJson" Version="1.1.0"/>
<PackageVersion Include="MicroElements.AutoFixture.NodaTime" Version="1.0.0"/>
<PackageVersion Include="MongoDb.Bson.NodaTime" Version="3.0.0"/>
<PackageVersion Include="Verify" Version="25.0.3"/>
<PackageVersion Include="Verify.Xunit" Version="25.0.3"/>
</ItemGroup>
<ItemGroup Label="Packages for samples">
<PackageVersion Include="MongoDB.Driver.Core.Extensions.OpenTelemetry" Version="1.0.0"/>
<PackageVersion Include="Npgsql.OpenTelemetry" Version="8.0.3"/>
<PackageVersion Include="OpenTelemetry" Version="1.8.1"/>
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1"/>
<PackageVersion Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.8.0-rc.1"/>
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="1.8.1"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1"/>
<PackageVersion Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="1.8.0-beta.1"/>
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.1"/>
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0"/>
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0"/>
<PackageVersion Include="Serilog.Sinks.Seq" Version="8.0.0"/>
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.6.2"/>
</ItemGroup>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<PropertyGroup Label="Microsoft extensions">
<MicrosoftExtensionsVer>8.0</MicrosoftExtensionsVer>
<MicrosoftHealthCheckVer>8.0.6</MicrosoftHealthCheckVer>
</PropertyGroup>
<PropertyGroup Label="Package versions for .NET 6" Condition="'$(TargetFramework)' == 'net6.0'">
<MicrosoftTestHostVer>[6.0.5,7)</MicrosoftTestHostVer>
<DiffPlexVersion>2.3.0</DiffPlexVersion>
</PropertyGroup>
<PropertyGroup Label="Package versions for .NET 8" Condition="'$(TargetFramework)' == 'net8.0'">
<MicrosoftTestHostVer>8.0.6</MicrosoftTestHostVer>
<DiffPlexVersion>3.0.0</DiffPlexVersion>
</PropertyGroup>
<PropertyGroup Label="Testcontainers version">
<TestcontainersVersion>3.9.0</TestcontainersVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="BenchmarkDotNet" Version="0.13.12" />
<PackageVersion Include="FluentValidation" Version="11.9.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="$(MicrosoftHealthCheckVer)" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(MicrosoftExtensionsVer)" />
<PackageVersion Include="Shouldly" Version="4.2.1" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="8.0.1" />
<PackageVersion Include="System.Reactive" Version="6.0.1" />
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
<PackageVersion Include="EventStore.Client.Grpc.PersistentSubscriptions" Version="23.3.3" />
<PackageVersion Include="EventStore.Client.Grpc.Streams" Version="23.3.3" />
<PackageVersion Include="MongoDB.Driver" Version="2.26.0" />
<PackageVersion Include="Google.Cloud.PubSub.V1" Version="3.14.0" />
<PackageVersion Include="Confluent.Kafka" Version="2.4.0" />
<PackageVersion Include="Npgsql" Version="8.0.3" />
<PackageVersion Include="Npgsql.DependencyInjection" Version="8.0.3" />
<PackageVersion Include="RabbitMQ.Client" Version="6.6.0" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.1" />
<PackageVersion Include="NEST" Version="7.17.5" />
<PackageVersion Include="Polly" Version="8.4.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="StackExchange.Redis" Version="2.6.90" />
<PackageVersion Include="Verify.DiffPlex" Version="$(DiffPlexVersion)" />
</ItemGroup>
<ItemGroup Label="Testcontainers">
<PackageVersion Include="Testcontainers" Version="$(TestcontainersVersion)" />
<PackageVersion Include="Testcontainers.EventStoreDb" Version="$(TestcontainersVersion)" />
<PackageVersion Include="Testcontainers.Kafka" Version="$(TestcontainersVersion)" />
<PackageVersion Include="Testcontainers.MongoDb" Version="$(TestcontainersVersion)" />
<PackageVersion Include="Testcontainers.PostgreSql" Version="$(TestcontainersVersion)" />
<PackageVersion Include="Testcontainers.RabbitMq" Version="$(TestcontainersVersion)" />
<PackageVersion Include="Testcontainers.Redis" Version="$(TestcontainersVersion)" />
<PackageVersion Include="Testcontainers.SqlEdge" Version="$(TestcontainersVersion)" />
</ItemGroup>
<ItemGroup Label="References for packable projects">
<PackageVersion Include="MinVer" Version="5.0.0" PrivateAssets="All" />
<PackageVersion Include="JetBrains.Annotations" Version="2023.3.0" PrivateAssets="All" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
</ItemGroup>
<ItemGroup Label="References for test projects">
<PackageVersion Include="AutoFixture" Version="4.18.1" />
<PackageVersion Include="Bogus" Version="35.5.1" />
<PackageVersion Include="FluentAssertions" Version="6.12.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageVersion Include="xunit" Version="2.8.1" />
<PackageVersion Include="xunit.abstractions" Version="2.0.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.1" PrivateAssets="All" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" PrivateAssets="All" />
<PackageVersion Include="Xunit.Extensions.Logging" Version="1.1.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="$(MicrosoftTestHostVer)" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftTestHostVer)" />
<PackageVersion Include="RestSharp" Version="110.2.0" />
<PackageVersion Include="Hypothesist" Version="3.0.88" />
<PackageVersion Include="NodaTime" Version="3.1.9" />
<PackageVersion Include="NodaTime.Serialization.SystemTextJson" Version="1.1.0" />
<PackageVersion Include="MicroElements.AutoFixture.NodaTime" Version="1.0.0" />
<PackageVersion Include="MongoDb.Bson.NodaTime" Version="3.0.0" />
<PackageVersion Include="Verify" Version="25.0.3" />
<PackageVersion Include="Verify.Xunit" Version="25.0.3" />
</ItemGroup>
<ItemGroup Label="Packages for samples">
<PackageVersion Include="MongoDB.Driver.Core.Extensions.OpenTelemetry" Version="1.0.0" />
<PackageVersion Include="Npgsql.OpenTelemetry" Version="8.0.3" />
<PackageVersion Include="OpenTelemetry" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.8.0-rc.1" />
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" />
<PackageVersion Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="1.8.0-beta.1" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.1" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Serilog.Sinks.Seq" Version="8.0.0" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.6.2" />
</ItemGroup>
</Project>
51 changes: 13 additions & 38 deletions samples/esdb/Bookings.Domain/Bookings/Booking.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,58 +6,32 @@ namespace Bookings.Domain.Bookings;

public class Booking : Aggregate<BookingState> {
public async Task BookRoom(
string guestId,
RoomId roomId,
StayPeriod period,
Money price,
Money prepaid,
DateTimeOffset bookedAt,
IsRoomAvailable isRoomAvailable
) {
string guestId,
RoomId roomId,
StayPeriod period,
Money price,
Money prepaid,
DateTimeOffset bookedAt,
IsRoomAvailable isRoomAvailable
) {
EnsureDoesntExist();
await EnsureRoomAvailable(roomId, period, isRoomAvailable);

var outstanding = price - prepaid;

Apply(
new V1.RoomBooked(
guestId,
roomId,
period.CheckIn,
period.CheckOut,
price.Amount,
prepaid.Amount,
outstanding.Amount,
price.Currency,
bookedAt
)
);
Apply(new V1.RoomBooked(guestId, roomId, period.CheckIn, period.CheckOut, price.Amount, prepaid.Amount, outstanding.Amount, price.Currency, bookedAt));

MarkFullyPaidIfNecessary(bookedAt);
}

public void RecordPayment(
Money paid,
string paymentId,
string paidBy,
DateTimeOffset paidAt
) {
public void RecordPayment(Money paid, string paymentId, string paidBy, DateTimeOffset paidAt) {
EnsureExists();

if (State.HasPaymentBeenRegistered(paymentId)) return;

var outstanding = State.Outstanding - paid;

Apply(
new V1.PaymentRecorded(
paid.Amount,
outstanding.Amount,
paid.Currency,
paymentId,
paidBy,
paidAt
)
);
Apply(new V1.PaymentRecorded(paid.Amount, outstanding.Amount, paid.Currency, paymentId, paidBy, paidAt));

MarkFullyPaidIfNecessary(paidAt);
MarkOverpaid(paidAt);
Expand All @@ -75,6 +49,7 @@ void MarkOverpaid(DateTimeOffset when) {

static async Task EnsureRoomAvailable(RoomId roomId, StayPeriod period, IsRoomAvailable isRoomAvailable) {
var roomAvailable = await isRoomAvailable(roomId, period);

if (!roomAvailable) throw new DomainException("Room not available");
}
}
}
38 changes: 20 additions & 18 deletions samples/esdb/Bookings.Domain/Bookings/BookingEvents.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
using Eventuous;
using NodaTime;

// ReSharper disable NotAccessedPositionalProperty.Global

namespace Bookings.Domain.Bookings;

public static class BookingEvents {
public static class V1 {
[EventType("V1.RoomBooked")]
public record RoomBooked(
string GuestId,
string RoomId,
LocalDate CheckInDate,
LocalDate CheckOutDate,
float BookingPrice,
float PrepaidAmount,
float OutstandingAmount,
string Currency,
DateTimeOffset BookingDate
);
string GuestId,
string RoomId,
LocalDate CheckInDate,
LocalDate CheckOutDate,
float BookingPrice,
float PrepaidAmount,
float OutstandingAmount,
string Currency,
DateTimeOffset BookingDate
);

[EventType("V1.PaymentRecorded")]
public record PaymentRecorded(
float PaidAmount,
float Outstanding,
string Currency,
string PaymentId,
string PaidBy,
DateTimeOffset PaidAt
);
float PaidAmount,
float Outstanding,
string Currency,
string PaymentId,
string PaidBy,
DateTimeOffset PaidAt
);

[EventType("V1.FullyPaid")]
public record BookingFullyPaid(DateTimeOffset FullyPaidAt);
Expand All @@ -37,4 +39,4 @@ public record BookingOverpaid(DateTimeOffset OverpaidAt);
[EventType("V1.BookingCancelled")]
public record BookingCancelled(string CancelledBy, DateTimeOffset CancelledAt);
}
}
}
Loading