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); } }
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; } }