예제 #1
0
        public Movie Handle(BookSeats command)
        {
            var movie = _eventStoreRepository.GetMovie(command.MovieId);

            movie.BookSeats(command.Seats);
            _eventStoreRepository.Save(movie);

            return(movie);
        }
예제 #2
0
        public void CreateMovie()
        {
            //Create movie
            var movieId            = Guid.NewGuid().ToString();
            var createMovieCommand = new CreateMovie
            {
                MovieId = movieId,
                Title   = "Batman",
                Seats   = 10
            };
            var movie = _movieHandler.Handle(createMovieCommand);

            Assert.AreEqual(movie.Id, movieId);
            Assert.AreEqual(movie.Title, "Batman");
            Assert.AreEqual(movie.AvaliableSeats, 10);

            // Book 2 seats
            var bookTwoSeatsCommand = new BookSeats
            {
                MovieId = movieId,
                Seats   = 2
            };

            movie = _movieHandler.Handle(bookTwoSeatsCommand);

            Assert.AreEqual(movie.AvaliableSeats, 8);

            // Cant book more seats than available
            var bookTooManySeats = new BookSeats
            {
                MovieId = movieId,
                Seats   = 10
            };

            movie = _movieHandler.Handle(bookTooManySeats);

            Assert.AreEqual(movie.AvaliableSeats, 8);

            // Book 4 seats
            var bookFourSeatsCommand = new BookSeats
            {
                MovieId = movieId,
                Seats   = 4
            };

            _movieHandler.Handle(bookFourSeatsCommand);

            // How many seats booked
            var seatsBooked = _views.GetSeatsBookedFor(movieId);

            Assert.AreEqual(seatsBooked, 6);

            // Create a snapshot
            _snapshotGenerator.SnapshotMovieAggregate(movieId);

            // Get events from snapshot aggregate
            seatsBooked = _views.GetSeatsBookedFor(movieId);
            Assert.AreEqual(seatsBooked, 6);

            // Book 1 seats
            var bookOneSeatCommand = new BookSeats
            {
                MovieId = movieId,
                Seats   = 1
            };

            movie = _movieHandler.Handle(bookOneSeatCommand);
            Assert.AreEqual(movie.AvaliableSeats, 3);

            // Book 1 seats
            movie = _movieHandler.Handle(bookOneSeatCommand);
            Assert.AreEqual(movie.AvaliableSeats, 2);

            // Create a new snapshot
            _snapshotGenerator.SnapshotMovieAggregate(movieId);

            // Book 1 seats
            movie = _movieHandler.Handle(bookOneSeatCommand);
            Assert.AreEqual(movie.AvaliableSeats, 1);
        }
예제 #3
0
 private void Handle(BookSeats command) =>
 ScreeningReservationById(command.ScreeningId)
 .Book(command.Seats, command.ClientId, command.At)
 .AppendEventsTo(_eventStore);