예제 #1
0
        /// <summary>
        /// Metoda zwracająca listę wcześniejszych rezerwacji.
        /// </summary>
        /// <returns>Informacje o wcześniejszych rezerwacjach</returns>
        internal BookingResponse[] GetBookings()
        {
            if (loggedUser != null)
            {
                RezerwacjaRepository        rezerwacjaRepository        = new RezerwacjaRepository();
                MiejsceRezerwacjaRepository miejsceRezerwacjaRepository = new MiejsceRezerwacjaRepository();
                MiejsceRepository           miejsceRepository           = new MiejsceRepository();
                FilmRepository  filmRepository  = new FilmRepository();
                SeansRepository seansRepository = new SeansRepository();

                List <RezerwacjaEntity> rezerwacje = rezerwacjaRepository.FindAllByUzytkownikId(loggedUser.Id);
                List <BookingResponse>  bookings   = new List <BookingResponse>();
                foreach (RezerwacjaEntity rezerwacja in rezerwacje)
                {
                    BookingResponse booking = new BookingResponse();

                    SeansEntity seans = seansRepository.FindById(rezerwacja.IdSeansu).OrElseThrow("Nie istnieje seans o podanym ID");
                    booking.DateTime = seans.Kiedy;

                    FilmEntity film = filmRepository.FindById(seans.IdFilmu).OrElseThrow("Nie można odnaleźć w bazie danych filmu o podanym ID");
                    booking.FilmName = film.Nazwa;

                    List <BookedSeatResponse>      bookedSeats       = new List <BookedSeatResponse>();
                    List <MiejsceRezerwacjaEntity> miejscaRezerwacje = miejsceRezerwacjaRepository.FindAllByRezerwacjaId(rezerwacja.Id);
                    foreach (MiejsceRezerwacjaEntity miejsceRezerwacja in miejscaRezerwacje)
                    {
                        BookedSeatResponse bookedSeat = new BookedSeatResponse();

                        MiejsceEntity miejsce = miejsceRepository.FindById(miejsceRezerwacja.IdMiejsca).OrElseThrow("Nie istnieje miejsce o podanym ID");
                        bookedSeat.PosX = miejsce.Numer;
                        bookedSeat.PosY = miejsce.Rzad;

                        bookedSeats.Add(bookedSeat);
                    }
                    booking.Seats = bookedSeats.ToArray();

                    bookings.Add(booking);
                }

                return(bookings.ToArray());
            }
            else
            {
                throw new Exception("Nie uzyskano autoryzacji do wykonania zadania");
            }
        }
        /// <summary>
        /// Metoda wyciągająca z bazy danych dane dotyczące seansu o podanym ID.
        /// </summary>
        /// <param name="idSeansu">ID seansu</param>
        /// <returns>Dane dotyczące seansu</returns>
        internal Optional <SeansEntity> FindById(int idSeansu)
        {
            SeansEntity     showing    = null;
            MySqlConnection connection = DBConnection.Instance.Connection;

            using (MySqlCommand command = new MySqlCommand("SELECT * FROM seanse WHERE id = '" + idSeansu + "';", connection))
            {
                connection.Open();
                MySqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    showing = new SeansEntity(reader);
                }
                connection.Close();
            }
            return(new Optional <SeansEntity>(showing));
        }