public void Handle(LeaveParkingPlaceCommand command)
        {
            var parking = _dbContext.Set <Models.Parking>()
                          .FirstOrDefault(p => p.Name == command.ParkingName);

            if (parking == null)
            {
                throw new Exception($"Cannot find parking '{command.ParkingName}'.");
            }
            if (!parking.IsOpened)
            {
                throw new Exception($"The parking '{command.ParkingName}' is closed.");
            }

            var parkingPlace = _dbContext.Set <ParkingPlace>()
                               .FirstOrDefault(p => p.ParkingName == command.ParkingName && p.Number == command.PlaceNumber);

            if (parkingPlace == null)
            {
                throw new Exception($"Cannot find place #{command.PlaceNumber} in the parking '{command.ParkingName}'.");
            }
            if (parkingPlace.IsFree)
            {
                throw new Exception($"Parking place #{command.PlaceNumber} is still free.");
            }

            parkingPlace.IsFree = true;
            parkingPlace.UserId = null;
            _dbContext.SaveChanges();

            _commandStoreService.Push(command);
        }
示例#2
0
        public void LeaveParkingPlace(string parkingName, int placeNumber)
        {
            var command = new LeaveParkingPlaceCommand(parkingName, placeNumber);

            var commandHandler = new LeaveParkingPlaceCommandHandler(_dbContext, _commandStoreService);

            commandHandler.Handle(command);
        }
示例#3
0
        public void LeaveParkingPlace(string parkingName, int placeNumber)
        {
            var command = new LeaveParkingPlaceCommand
            {
                ParkingName = parkingName,
                PlaceNumber = placeNumber
            };

            _commandHandler.Handle(command);
        }
        public async Task Should_LeaveParkingPlace(string AParkingName, int APlaceNumber)
        {
            // Arrange
            var LHandleLeaveParkingPlace = new LeaveParkingPlaceCommandHandler(FMockDbContext.Object, FCommands);
            var LCommand = new LeaveParkingPlaceCommand
            {
                ParkingName = AParkingName,
                PlaceNumber = APlaceNumber
            };

            // Act
            var LResult = await LHandleLeaveParkingPlace.Handle(LCommand, CancellationToken.None);

            // Assert
            FMockDbContext
            .Verify(AMockDbContext => AMockDbContext.SaveChangesAsync(CancellationToken.None), Times.Once);

            LResult.ToString().Should().Be("()");
        }