Example #1
0
        public SeatsReserved ReserveSeats(ReserveSeats reserveSeats)
        {
            var rows = new List <Row>();
            Row rowWithAvailableSeats = null;

            foreach (var row in _rows)
            {
                if (!(rowWithAvailableSeats is null) || !row.HasAvailableSeats(reserveSeats.SeatsToBeReserved))
                {
                    rows.Add(Row.CreateFromRow(row));
                    continue;
                }

                rowWithAvailableSeats = row;
            }

            if (rowWithAvailableSeats is null)
            {
                throw new SeatsNotAvailable();
            }

            rows.Add(rowWithAvailableSeats.ReserveSeats(reserveSeats.SeatsToBeReserved));

            _rows = rows.OrderBy(x => x.RowNumber).ToList();

            return(new SeatsReserved(reserveSeats.SeatsToBeReserved));
        }