예제 #1
0
 private Room CreateRoom(int accommodationId, Models.Requests.Room room) => new Room
 {
     AccommodationId         = accommodationId,
     Name                    = room.Name,
     Description             = room.Description,
     Amenities               = room.Amenities,
     Modified                = _dateTimeProvider.UtcNow(),
     OccupancyConfigurations = room.OccupancyConfigurations
 };
예제 #2
0
        public Task <Result <Models.Responses.Room> > UpdateRoom(int accommodationId, int roomId, Models.Requests.Room roomRequest)
        {
            return(ValidateRoom()
                   .Bind(() => _managerContext.GetServiceSupplier())
                   .Check(serviceSupplier => _serviceSupplierContext.EnsureAccommodationBelongsToServiceSupplier(serviceSupplier, accommodationId))
                   .Ensure(serviceSupplier => DoesRoomBelongToAccommodation(accommodationId, roomId), $"The room with {nameof(roomId)} '{roomId}' doesn't belong to the accommodation with {nameof(accommodationId)} '{accommodationId}'")
                   .Map(serviceSupplier => CreateRoom(accommodationId, roomRequest))
                   .Map(NormalizeRoomAmenities)
                   .Map(UpdateRoom)
                   .Tap(AddRoomAmenitiesToStoreIfNeeded)
                   .Map(Build));


            Result ValidateRoom()
            => GenericValidator <Models.Requests.Room> .Validate(configureAction => configureAction.RuleFor(exp => exp)
                                                                 .SetValidator(new RoomValidator()), roomRequest);


            async Task <Room> UpdateRoom(Room room)
            {
                room.Id = roomId;

                _dbContext.Rooms.Update(room);
                await _dbContext.SaveChangesAsync();

                return(room);
            }
        }