protected override async Task Handle(CreateRoomRequest request, CancellationToken cancellationToken)
        {
            if ((await _roomRepository.GetByAddress(request.BuildingName, request.Floor, request.RoomNumber)) != null)
            {
                throw new RoomExistsException("Room already exists.");
            }

            var requestedAddress = Address.CreateFor(
                DoorNumber.CreateFor(request.RoomNumber),
                Floor.CreateFor(request.Floor),
                Building.CreateFor(request.BuildingName));

            var room = new Room(new RoomId(Guid.NewGuid()), RoomType.Other, requestedAddress);

            await _eventStore.Save <Room, RoomId>(room);

            var aggregate = await _eventStore.Load <Room, RoomId>(room.Id);

            foreach (var @event in room.GetChanges())
            {
                await _mediator.Publish(@event);
            }
        }
Example #2
0
        protected override void When(object @event)
        {
            switch (@event)
            {
            case RoomOccupationDateChanged roomOccupied:
            {
                this.OccupationEndDate = roomOccupied.OccupationEndDate;
            }

            break;

            case RoomCreated roomCreated:
            {
                this.Id       = new RoomId(roomCreated.RoomId);
                this.RoomType = (RoomType)roomCreated.RoomType;
                this.Address  = Address.CreateFor(
                    DoorNumber.CreateFor(roomCreated.DoorNumber),
                    Floor.CreateFor(roomCreated.Floor),
                    Building.CreateFor(roomCreated.Building));
            }
            break;
            }
        }