diff --git a/src/BuildingBlocks/Core/IEventMapper.cs b/src/BuildingBlocks/Core/IEventMapper.cs index 041bc92..7a5c867 100644 --- a/src/BuildingBlocks/Core/IEventMapper.cs +++ b/src/BuildingBlocks/Core/IEventMapper.cs @@ -4,6 +4,6 @@ namespace BuildingBlocks.Core; public interface IEventMapper { - IIntegrationEvent MapToIntegrationEvent(IDomainEvent @event); - IInternalCommand MapToInternalCommand(IDomainEvent @event); + IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event); + IInternalCommand? MapToInternalCommand(IDomainEvent @event); } diff --git a/src/BuildingBlocks/Jwt/AuthHeaderHandler.cs b/src/BuildingBlocks/Jwt/AuthHeaderHandler.cs index e8f06da..754cee8 100644 --- a/src/BuildingBlocks/Jwt/AuthHeaderHandler.cs +++ b/src/BuildingBlocks/Jwt/AuthHeaderHandler.cs @@ -17,7 +17,7 @@ public class AuthHeaderHandler : DelegatingHandler { var token = (_httpContext?.HttpContext?.Request.Headers["Authorization"])?.ToString(); - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token?.Replace("Bearer ", "", StringComparison.Ordinal)); + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token?.Replace("Bearer ", "")); return base.SendAsync(request, cancellationToken); } diff --git a/src/BuildingBlocks/PersistMessageProcessor/PersistMessageProcessor.cs b/src/BuildingBlocks/PersistMessageProcessor/PersistMessageProcessor.cs index 9ba47af..5ada23a 100644 --- a/src/BuildingBlocks/PersistMessageProcessor/PersistMessageProcessor.cs +++ b/src/BuildingBlocks/PersistMessageProcessor/PersistMessageProcessor.cs @@ -200,10 +200,7 @@ public class PersistMessageProcessor : IPersistMessageProcessor deliveryType), cancellationToken); - await _persistMessageDbContext.RetryOnFailure(async () => - { - await _persistMessageDbContext.SaveChangesAsync(cancellationToken); - }); + await _persistMessageDbContext.SaveChangesAsync(cancellationToken); _logger.LogInformation( "Message with id: {MessageID} and delivery type: {DeliveryType} saved in persistence message store.", @@ -219,9 +216,6 @@ public class PersistMessageProcessor : IPersistMessageProcessor _persistMessageDbContext.PersistMessages.Update(message); - await _persistMessageDbContext.RetryOnFailure(async () => - { - await _persistMessageDbContext.SaveChangesAsync(cancellationToken); - }); + await _persistMessageDbContext.SaveChangesAsync(cancellationToken); } } diff --git a/src/BuildingBlocks/TestBase/TestBase.cs b/src/BuildingBlocks/TestBase/TestBase.cs index 5737503..c066dc3 100644 --- a/src/BuildingBlocks/TestBase/TestBase.cs +++ b/src/BuildingBlocks/TestBase/TestBase.cs @@ -92,10 +92,6 @@ public class TestFixture : IAsyncLifetime services.AddSingleton(); - // // remove persist-message processor background service - // var descriptor = services.Single(s => s.ImplementationType == typeof(PersistMessageBackgroundService)); - // services.Remove(descriptor); - // add authentication using a fake jwt bearer - we can use SetAdminUser method to set authenticate user to existing HttContextAccessor // https://github.com/webmotions/fake-authentication-jwtbearer // https://github.com/webmotions/fake-authentication-jwtbearer/issues/14 diff --git a/src/Services/Booking/src/Booking/Booking/Features/CreatingBook/Commands/V1/CreateBooking.cs b/src/Services/Booking/src/Booking/Booking/Features/CreatingBook/Commands/V1/CreateBooking.cs index 93b1911..13aad08 100644 --- a/src/Services/Booking/src/Booking/Booking/Features/CreatingBook/Commands/V1/CreateBooking.cs +++ b/src/Services/Booking/src/Booking/Booking/Features/CreatingBook/Commands/V1/CreateBooking.cs @@ -100,7 +100,7 @@ internal class CreateBookingCommandHandler : ICommandHandler() @@ -90,9 +90,8 @@ internal class CreateAircraftHandler : IRequestHandler a.Model.Value.Equals(Model.Of(request.Model)), cancellationToken); - + var aircraft = await _flightDbContext.Aircraft.SingleOrDefaultAsync( + a => a.Model.Value == request.Model, cancellationToken); if (aircraft is not null) { @@ -101,7 +100,7 @@ internal class CreateAircraftHandler : IRequestHandler var aircraftReadModel = _mapper.Map(request); var aircraft = await _flightReadDbContext.Aircraft.AsQueryable() - .FirstOrDefaultAsync(x => x.AircraftId == AircraftId.Of(aircraftReadModel.AircraftId), cancellationToken); + .FirstOrDefaultAsync(x => x.AircraftId == aircraftReadModel.AircraftId && + !x.IsDeleted, cancellationToken); if (aircraft is not null) { diff --git a/src/Services/Flight/src/Flight/Airports/Features/CreatingAirport/V1/CreateAirport.cs b/src/Services/Flight/src/Flight/Airports/Features/CreatingAirport/V1/CreateAirport.cs index bf05051..36499c9 100644 --- a/src/Services/Flight/src/Flight/Airports/Features/CreatingAirport/V1/CreateAirport.cs +++ b/src/Services/Flight/src/Flight/Airports/Features/CreatingAirport/V1/CreateAirport.cs @@ -97,8 +97,8 @@ internal class CreateAirportHandler : IRequestHandler var airportReadModel = _mapper.Map(request); var aircraft = await _flightReadDbContext.Airport.AsQueryable() - .FirstOrDefaultAsync(x => x.AirportId == airportReadModel.AirportId, cancellationToken); + .FirstOrDefaultAsync(x => x.AirportId == airportReadModel.AirportId && + !x.IsDeleted, cancellationToken); if (aircraft is not null) { diff --git a/src/Services/Flight/src/Flight/Airports/ValueObjects/Address.cs b/src/Services/Flight/src/Flight/Airports/ValueObjects/Address.cs index fe0d2c0..a9b9aaa 100644 --- a/src/Services/Flight/src/Flight/Airports/ValueObjects/Address.cs +++ b/src/Services/Flight/src/Flight/Airports/ValueObjects/Address.cs @@ -1,14 +1,8 @@ namespace Flight.Airports.ValueObjects; -using System.Linq; using Exceptions; public class Address { - public string Street { get; } - public string City { get; } - public string State { get; } - public string ZipCode { get; } - public string Country { get; } public string Value { get; } public Address(string value) @@ -20,17 +14,6 @@ public class Address Value = value; } - public Address(string street, string city, string state, string zipCode, string country) - { - Street = street?.Trim(); - City = city?.Trim(); - State = state?.Trim(); - ZipCode = zipCode?.Trim(); - Country = country?.Trim(); - - Value = string.Join(", ", new[] { Street, City, State, ZipCode, Country }.Where(s => !string.IsNullOrWhiteSpace(s))); - } - public static Address Of(string value) { return new Address(value); diff --git a/src/Services/Flight/src/Flight/Data/Configurations/FlightConfiguration.cs b/src/Services/Flight/src/Flight/Data/Configurations/FlightConfiguration.cs index a06abe2..18e75fe 100644 --- a/src/Services/Flight/src/Flight/Data/Configurations/FlightConfiguration.cs +++ b/src/Services/Flight/src/Flight/Data/Configurations/FlightConfiguration.cs @@ -36,17 +36,20 @@ public class FlightConfiguration : IEntityTypeConfiguration() .WithMany() - .HasForeignKey(p => p.AircraftId); + .HasForeignKey(p => p.AircraftId) + .IsRequired(); builder .HasOne() .WithMany() - .HasForeignKey(d => d.DepartureAirportId); + .HasForeignKey(d => d.DepartureAirportId) + .IsRequired(); builder .HasOne() .WithMany() - .HasForeignKey(d => d.ArriveAirportId); + .HasForeignKey(d => d.ArriveAirportId) + .IsRequired(); builder.OwnsOne( diff --git a/src/Services/Flight/src/Flight/Data/Migrations/20230611213200_initial.Designer.cs b/src/Services/Flight/src/Flight/Data/Migrations/20230611230948_initial.Designer.cs similarity index 99% rename from src/Services/Flight/src/Flight/Data/Migrations/20230611213200_initial.Designer.cs rename to src/Services/Flight/src/Flight/Data/Migrations/20230611230948_initial.Designer.cs index 3e0ddd9..4010517 100644 --- a/src/Services/Flight/src/Flight/Data/Migrations/20230611213200_initial.Designer.cs +++ b/src/Services/Flight/src/Flight/Data/Migrations/20230611230948_initial.Designer.cs @@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Flight.Data.Migrations { [DbContext(typeof(FlightDbContext))] - [Migration("20230611213200_initial")] + [Migration("20230611230948_initial")] partial class initial { /// diff --git a/src/Services/Flight/src/Flight/Data/Migrations/20230611213200_initial.cs b/src/Services/Flight/src/Flight/Data/Migrations/20230611230948_initial.cs similarity index 100% rename from src/Services/Flight/src/Flight/Data/Migrations/20230611213200_initial.cs rename to src/Services/Flight/src/Flight/Data/Migrations/20230611230948_initial.cs diff --git a/src/Services/Flight/src/Flight/EventMapper.cs b/src/Services/Flight/src/Flight/EventMapper.cs index c9378af..a5886ee 100644 --- a/src/Services/Flight/src/Flight/EventMapper.cs +++ b/src/Services/Flight/src/Flight/EventMapper.cs @@ -16,7 +16,7 @@ using Seats.Features.ReservingSeat.Commands.V1; // ref: https://www.ledjonbehluli.com/posts/domain_to_integration_event/ public sealed class EventMapper : IEventMapper { - public IIntegrationEvent MapToIntegrationEvent(IDomainEvent @event) + public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event) { return @event switch { @@ -31,7 +31,7 @@ public sealed class EventMapper : IEventMapper }; } - public IInternalCommand MapToInternalCommand(IDomainEvent @event) + public IInternalCommand? MapToInternalCommand(IDomainEvent @event) { return @event switch { diff --git a/src/Services/Flight/src/Flight/Flights/Features/CreatingFlight/V1/CreateFlight.cs b/src/Services/Flight/src/Flight/Flights/Features/CreatingFlight/V1/CreateFlight.cs index 4424fe1..85a31d6 100644 --- a/src/Services/Flight/src/Flight/Flights/Features/CreatingFlight/V1/CreateFlight.cs +++ b/src/Services/Flight/src/Flight/Flights/Features/CreatingFlight/V1/CreateFlight.cs @@ -119,8 +119,8 @@ internal class CreateFlightHandler : ICommandHandler x.Id == FlightId.Of(request.Id), cancellationToken); + var flight = await _flightDbContext.Flights.SingleOrDefaultAsync(x => x.Id == request.Id, cancellationToken); + if (flight is null) { throw new FlightNotFountException(); @@ -84,8 +85,8 @@ internal class DeleteFlightHandler : ICommandHandler x.Id == FlightId.Of(request.Id), + var flight = await _flightDbContext.Flights.SingleOrDefaultAsync(x => x.Id == request.Id, cancellationToken); if (flight is null) @@ -118,8 +118,8 @@ internal class UpdateFlightHandler : ICommandHandler x.Id.Equals(SeatId.Of(command.Id)), cancellationToken); + var seat = await _flightDbContext.Seats.SingleOrDefaultAsync(x => x.Id == command.Id, cancellationToken); + if (seat is not null) { throw new SeatAlreadyExistException(); @@ -105,8 +106,8 @@ internal class CreateSeatCommandHandler : IRequestHandler var seatReadModel = _mapper.Map(request); var seat = await _flightReadDbContext.Seat.AsQueryable() - .FirstOrDefaultAsync(x => x.SeatId == seatReadModel.SeatId, cancellationToken); + .FirstOrDefaultAsync(x => x.SeatId == seatReadModel.SeatId && + !x.IsDeleted, cancellationToken); if (seat is not null) { diff --git a/src/Services/Flight/src/Flight/Seats/Features/ReservingSeat/Commands/V1/ReserveSeat.cs b/src/Services/Flight/src/Flight/Seats/Features/ReservingSeat/Commands/V1/ReserveSeat.cs index 60c0748..4ff836b 100644 --- a/src/Services/Flight/src/Flight/Seats/Features/ReservingSeat/Commands/V1/ReserveSeat.cs +++ b/src/Services/Flight/src/Flight/Seats/Features/ReservingSeat/Commands/V1/ReserveSeat.cs @@ -84,10 +84,9 @@ internal class ReserveSeatCommandHandler : IRequestHandler x.SeatNumber.Value.Equals(SeatNumber.Of(command.SeatNumber)) && x.FlightId.Equals(FlightId.Of(command.FlightId)), cancellationToken); + var seat = await _flightDbContext.Seats.SingleOrDefaultAsync( + x => x.SeatNumber.Value == command.SeatNumber && + x.FlightId == command.FlightId, cancellationToken); if (seat is null) { @@ -96,7 +95,7 @@ internal class ReserveSeatCommandHandler : IRequestHandler()).Should().Be(true); - (await Fixture.WaitForConsuming()).Should().Be(true); } } diff --git a/src/Services/Identity/src/Identity/Configurations/EventMapper.cs b/src/Services/Identity/src/Identity/Configurations/EventMapper.cs index 94b82c0..2cce314 100644 --- a/src/Services/Identity/src/Identity/Configurations/EventMapper.cs +++ b/src/Services/Identity/src/Identity/Configurations/EventMapper.cs @@ -5,7 +5,7 @@ using BuildingBlocks.Core.Event; public sealed class EventMapper : IEventMapper { - public IIntegrationEvent MapToIntegrationEvent(IDomainEvent @event) + public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event) { return @event switch { @@ -13,7 +13,7 @@ public sealed class EventMapper : IEventMapper }; } - public IInternalCommand MapToInternalCommand(IDomainEvent @event) + public IInternalCommand? MapToInternalCommand(IDomainEvent @event) { return @event switch { diff --git a/src/Services/Passenger/src/Passenger/EventMapper.cs b/src/Services/Passenger/src/Passenger/EventMapper.cs index 86263a2..21a700e 100644 --- a/src/Services/Passenger/src/Passenger/EventMapper.cs +++ b/src/Services/Passenger/src/Passenger/EventMapper.cs @@ -9,7 +9,7 @@ using Passengers.Features.CompletingRegisterPassenger.V1; public sealed class EventMapper : IEventMapper { - public IIntegrationEvent MapToIntegrationEvent(IDomainEvent @event) + public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event) { return @event switch { @@ -19,7 +19,7 @@ public sealed class EventMapper : IEventMapper }; } - public IInternalCommand MapToInternalCommand(IDomainEvent @event) + public IInternalCommand? MapToInternalCommand(IDomainEvent @event) { return @event switch { diff --git a/src/Services/Passenger/src/Passenger/Identity/Consumers/RegisteringNewUser/V1/RegisterNewUser.cs b/src/Services/Passenger/src/Passenger/Identity/Consumers/RegisteringNewUser/V1/RegisterNewUser.cs index 9c30106..a674210 100644 --- a/src/Services/Passenger/src/Passenger/Identity/Consumers/RegisteringNewUser/V1/RegisterNewUser.cs +++ b/src/Services/Passenger/src/Passenger/Identity/Consumers/RegisteringNewUser/V1/RegisterNewUser.cs @@ -38,7 +38,7 @@ public class RegisterNewUserHandler : IConsumer _logger.LogInformation($"consumer for {nameof(UserCreated).Underscore()} in {_options.Name}"); var passengerExist = - await _passengerDbContext.Passengers.AnyAsync(x => x.PassportNumber.Value == PassportNumber.Of(context.Message.PassportNumber).Value); + await _passengerDbContext.Passengers.AnyAsync(x => x.PassportNumber.Value == context.Message.PassportNumber); if (passengerExist) { diff --git a/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs b/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs index 10c5687..dce346c 100644 --- a/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs +++ b/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs @@ -97,7 +97,7 @@ internal class CompleteRegisterPassengerCommandHandler : ICommandHandler x.PassportNumber.Value.Equals(PassportNumber.Of(request.PassportNumber).Value), cancellationToken); + x => x.PassportNumber.Value == request.PassportNumber, cancellationToken); if (passenger is null) @@ -108,7 +108,7 @@ internal class CompleteRegisterPassengerCommandHandler : ICommandHandler(updatePassenger); diff --git a/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassengerMongo.cs b/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassengerMongo.cs index 52c1745..dcb20e0 100644 --- a/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassengerMongo.cs +++ b/src/Services/Passenger/src/Passenger/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassengerMongo.cs @@ -35,7 +35,7 @@ internal class CompleteRegisterPassengerMongoHandler : ICommandHandler(request); var passenger = await _passengerReadDbContext.Passenger.AsQueryable() - .FirstOrDefaultAsync(x => x.PassengerId == PassengerId.Of(passengerReadModel.PassengerId) && !x.IsDeleted, cancellationToken); + .FirstOrDefaultAsync(x => x.PassengerId == passengerReadModel.PassengerId && !x.IsDeleted, cancellationToken); if (passenger is not null) { diff --git a/src/Services/Passenger/src/Passenger/Passengers/Features/GettingPassengerById/Queries/V1/GetPassengerById.cs b/src/Services/Passenger/src/Passenger/Passengers/Features/GettingPassengerById/Queries/V1/GetPassengerById.cs index 571adc3..50e16f9 100644 --- a/src/Services/Passenger/src/Passenger/Passengers/Features/GettingPassengerById/Queries/V1/GetPassengerById.cs +++ b/src/Services/Passenger/src/Passenger/Passengers/Features/GettingPassengerById/Queries/V1/GetPassengerById.cs @@ -75,7 +75,7 @@ internal class GetPassengerByIdHandler : IQueryHandler x.PassengerId == PassengerId.Of(query.Id) && x.IsDeleted == false, cancellationToken); + .SingleOrDefaultAsync(x => x.PassengerId == query.Id && x.IsDeleted == false, cancellationToken); if (passenger is null) { diff --git a/src/Services/Passenger/src/Passenger/Passengers/Models/Passenger.cs b/src/Services/Passenger/src/Passenger/Passengers/Models/Passenger.cs index 38ed070..0659ca5 100644 --- a/src/Services/Passenger/src/Passenger/Passengers/Models/Passenger.cs +++ b/src/Services/Passenger/src/Passenger/Passengers/Models/Passenger.cs @@ -26,7 +26,7 @@ public record Passenger : Aggregate }; var @event = new PassengerRegistrationCompletedDomainEvent(passenger.Id, passenger.Name, passenger.PassportNumber, - passenger.PassengerType, passenger.Age.Value, passenger.IsDeleted); + passenger.PassengerType, passenger.Age, passenger.IsDeleted); passenger.AddDomainEvent(@event);