Exemple #1
0
        public async Task AddAsync(AddSeance seance)
        {
            var newSeance = _mapper.Map <AddSeance, Seance>(seance);
            var movie     = await _dbContext.Movies.FirstOrDefaultAsync(x => x.Id == newSeance.MovieId);

            if (movie == null)
            {
                throw new Exception("Movie with this id doesn't exists.");
            }
            if (movie.Duration > newSeance.Duration)
            {
                throw new Exception("Seance duration cannot be shorter than movie duration.");
            }
            var availableRooms = await _roomService.GetAvailableRoomsOnTimeAsync(newSeance.SeanceStart,
                                                                                 newSeance.SeanceStart.Add(newSeance.Duration));

            if (!availableRooms.Select(r => r.Id).Contains(newSeance.RoomId))
            {
                throw new Exception("Room is not available");
            }

            await _dbContext.Seances.AddAsync(newSeance);

            await _dbContext.SaveChangesAsync();
        }
Exemple #2
0
        public async Task AddAsync(MovieRequest addMovie)
        {
            var newMovie = new Movie(addMovie.Title, addMovie.TrailerPath, addMovie.PosterPath, addMovie.BackgroundPath, addMovie.Category, addMovie.Description, addMovie.ProductionDate
                                     , addMovie.Duration, addMovie.MinimalAge.Value);
            await _dbContext.Movies.AddAsync(newMovie);

            await _dbContext.SaveChangesAsync();
        }
Exemple #3
0
        public async Task RegisterAsync(string email, string firstName, string lastName, string password, string role, string phoneNumber)
        {
            var user = await _dbContext.Users.FirstOrDefaultAsync(x => x.Email == email);

            if (user != null)
            {
                throw new CinemaException(ErrorCodes.EmailOccupied);
            }
            user = new User(email, firstName, lastName, password, role, phoneNumber);
            await _dbContext.Users.AddAsync(user);

            await _dbContext.SaveChangesAsync();

            user = await _dbContext.Users.SingleOrDefaultAsync(x => x.Email == email);
            await SendConfirmTokenAsync(user.Id);
        }
Exemple #4
0
        public async Task AddAsync(int userId, AddReservation addReservation)
        {
            if (addReservation.NumberOfConcessionaryTickets + addReservation.NumberOfNormalTickets !=
                addReservation.SeatsToReserve.Count())
            {
                throw new Exception("Number of tickets is not equal to number of choosen seats");
            }

            Seance seance = await _dbContext.Seances
                            .Include(x => x.Room).ThenInclude(x => x.Seats)
                            .Include(x => x.Reservations).ThenInclude(x => x.ReservedSeats)
                            .FirstOrDefaultAsync(x => x.Id == addReservation.SeanceId);

            if (seance == null)
            {
                throw new Exception("Seance doesn't exist");
            }

            Reservation reservation = new Reservation(addReservation.SeanceId, userId, addReservation.NumberOfNormalTickets, addReservation.NumberOfConcessionaryTickets);

            foreach (var seatToReserve in addReservation.SeatsToReserve)
            {
                var seat = await _dbContext.Seats.SingleOrDefaultAsync(x => x.RoomId == seance.RoomId && x.Number == seatToReserve.Number && x.Row == seatToReserve.Row);

                if (seat == null)
                {
                    throw new Exception("Seat with given row and numer doesn't exist in seance room.");
                }
                if (seance.Reservations.Any(r => r.ReservedSeats.Any(rs => rs.SeatId == seat.Id)))
                {
                    throw new Exception($"Seat {seat.Row}|{seat.Number} already reserved");
                }
                reservation.AddReservedSeat(seat.Id, _dbContext);
            }
            await _dbContext.Reservations.AddAsync(reservation);

            await _dbContext.SaveChangesAsync();

            var user = await _dbContext.Users.FirstOrDefaultAsync(x => x.Id == userId);

            await _emailSender.SendEmailAsync(user.Email, "Potwierdzenie rezerwacji", "Twoja rezerwacja zakończyła się powodzeniem");
        }
Exemple #5
0
        public async Task AddRoom(string name, int numberOfRows, int numberOfSeatsInRow)
        {
            var room = await _dbContext.Rooms.FirstOrDefaultAsync(x => x.Name == name);

            if (room != null)
            {
                throw new Exception("Room with this name already exist");
            }
            room = new Room(name, numberOfRows, numberOfSeatsInRow);
            await _dbContext.Rooms.AddAsync(room);

            await _dbContext.SaveChangesAsync();
        }