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(); }
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(); }
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); }
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"); }
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(); }