Exemplo n.º 1
0
        public int?AcceptTicket(OrderDTO orderDTO)
        {
            Movie movie = movieRepository.GetByID(orderDTO.MovieId);

            if (movie == null)
            {
                return(null);
            }


            List <Seat> seats = new List <Seat>();

            foreach (var seatId in orderDTO.SelectedSeats)
            {
                Seat seat = seatRepository.GetByID(seatId);

                if (seat == null)
                {
                    return(null);
                }

                seat.Status = SeatStatus.Taken;
                seats.Add(seat);
            }

            List <SnackOrder> snackOrders = new List <SnackOrder>();

            foreach (var snack in orderDTO.Snacks)
            {
                Snack orderedSnack = snackRepository.GetByID(snack.Id);
                if (orderedSnack == null)
                {
                    return(null);
                }

                snackOrders.Add(new SnackOrder
                {
                    Snack    = orderedSnack,
                    Quantity = snack.Quantity,
                    Size     = snack.Size
                });
            }

            Order order = new Order
            {
                Movie     = movie,
                Seats     = seats,
                OrderDate = DateTime.UtcNow,
                Snacks    = snackOrders,
                Screening = movie.ScreeningTimes.FirstOrDefault(s => s.Screening.ToUnixTimeSeconds() == orderDTO.Date.ToUnixTimeSeconds()),
                Tickets   = orderDTO.Tickets
            };

            orderRepository.Insert(order);
            orderRepository.SaveChanges();

            return(order.Id);
        }