コード例 #1
0
 protected override async Task CallTransaction(decimal amount, string description, CreditCard data)
 {
     try
     {
         ValidateResult(await _paymentApi.TransactionAsync(amount, description, data));
     }
     catch (ArgumentNullException argumentException)
     {
         var exception = new PaymentException(PaymentError.DataIncomplete, "Given data incomplete", argumentException);
         Logger.Here().Error(exception, "{CreditCard} data was incomplete", nameof(ApolloCreditCard));
         throw exception;
     }
     catch (ArgumentException argumentException)
     {
         var exception = new PaymentException(PaymentError.DataInvalid, "Given data not valid", argumentException);
         Logger.Here().Error(exception, "{CreditCard} data was invalid", nameof(ApolloCreditCard));
         throw exception;
     }
     catch (NetworkConnectionException networkConnectionException)
     {
         var exception = new PaymentException(PaymentError.ConnectionLost, "Connection lost", networkConnectionException);
         Logger.Here().Error(exception, "Connection was lost during transaction");
         throw exception;
     }
 }
コード例 #2
0
ファイル: RepositorySchedule.cs プロジェクト: EnvyIT/apollo
        public async Task AddSchedulesForMoviesAsync(DateTime from, DateTime to, IEnumerable <Movie> movies)
        {
            ValidateDateRange(from, to);
            ValidateCollection(movies);
            var moviesList   = movies.ToList();
            var schedules    = new List <Schedule>();
            var cinemaHalls  = (await _cinemaHallDao.FluentSelectAll().QueryAsync()).ToList();
            var cinemaHallId = cinemaHalls.Any()
                ? cinemaHalls.First().Id
                : throw new ArgumentNullException(nameof(AddSchedulesForMoviesAsync));
            var current   = from;
            var batchSize = 0;

            while (current != to)
            {
                var scheduleThisDay = RandomGenerator.GenerateRandomNumber(MinSchedulesPerDay, MaxSchedulesPerDay);
                var lastStartTime   = new DateTime(current.Year, current.Month, current.Day, 0, 0, 0, 0);
                var movie           = GetRandomMovie(moviesList);
                for (var i = 0; i < scheduleThisDay; ++i)
                {
                    Logger.Here().Info("{StartTime} {scheduleThisDay}", lastStartTime, scheduleThisDay);
                    if (batchSize == BatchSize) //to avoid huge memory consumption flush after batch size is reached
                    {
                        Logger.Here().Info("Processing batch with {currentSchedules} {batchSize}", schedules.Count, batchSize);
                        await AddSchedulesAsync(schedules);

                        schedules.Clear();
                        batchSize = 0;
                        Logger.Here().Info("Batch processed - Reset batch count {currentSchedules} {batchSize}", schedules.Count, batchSize);
                    }

                    movie = NewRandomMovie(moviesList, i, movie);

                    schedules.Add(new Schedule
                    {
                        CinemaHallId = cinemaHallId,
                        MovieId      = movie.Id,
                        Price        = GetRandomPrice(lastStartTime.IsWeekend()),
                        StartTime    = lastStartTime
                    });

                    if (lastStartTime.WouldExceedDay(movie.Duration + BufferTime))
                    {
                        break;
                    }
                    lastStartTime = IsFirstStartTime(lastStartTime) ?
                                    lastStartTime.AddHours(BreakTime) :
                                    lastStartTime.AddMinutes(movie.Duration).AddMinutes(BufferTime);
                    ++batchSize;
                }
                current = current.AddDays(OneDay);
            }
            if (schedules.Count > 0)
            {
                await AddSchedulesAsync(schedules);
            }
        }
コード例 #3
0
        public bool IsValid(IEnumerable <SeatDto> seatLayout, IEnumerable <SeatDto> desiredSeats)
        {
            ValidationHelper.ValidateEnumerableIsNotNullOrEmpty(Logger.Here(), seatLayout, nameof(seatLayout));
            ValidationHelper.ValidateEnumerableIsNotNullOrEmpty(Logger.Here(), desiredSeats, nameof(desiredSeats));
            var desiredSeatIds = desiredSeats.Select(ds => ds.Id).ToList();
            var seats          = seatLayout.Where(s => desiredSeatIds.Contains(s.Id))
                                 .ToList();

            return(seats.Count() == desiredSeatIds.Count() && seats.All(s => s.State == SeatState.Free));
        }
コード例 #4
0
ファイル: UserService.cs プロジェクト: EnvyIT/apollo
        public async Task <UserDto> AddUserAsync(UserDto user)
        {
            ValidateUserDto(user);

            var mappedUser = Map(user);
            var cityExist  =
                await _unitOfWork.RepositoryUser.CityExistAsync(user.Address.PostalCode, user.Address.City);

            await _unitOfWork.Transaction().PerformBlock(async() =>
            {
                if (!cityExist.Exist)
                {
                    var cityId = await _unitOfWork.RepositoryUser.AddCityAsync(mappedUser.Address.City);
                    ValidateId <UserService, City>(Logger.Here(), cityId);
                    mappedUser.Address.CityId = cityId;
                }

                var addressId = await _unitOfWork.RepositoryUser.AddAddressAsync(mappedUser.Address);
                ValidateId <UserService, Address>(Logger.Here(), addressId);
                mappedUser.AddressId = addressId;

                var userId = await _unitOfWork.RepositoryUser.AddUserAsync(mappedUser);
                ValidateId <UserService, User>(Logger.Here(), userId);
            }).Commit();

            return(user);
        }
コード例 #5
0
ファイル: SeatBlockValidation.cs プロジェクト: EnvyIT/apollo
        public bool IsValid(IEnumerable <SeatDto> seatLayout, IEnumerable <SeatDto> desiredSeats)
        {
            ValidationHelper.ValidateEnumerableIsNotNullOrEmpty(Logger.Here(), seatLayout, nameof(seatLayout));
            ValidationHelper.ValidateEnumerableIsNotNullOrEmpty(Logger.Here(), desiredSeats, nameof(desiredSeats));

            var seatsForReservation = desiredSeats.ToList();
            var lowestSeatNo        = seatsForReservation.Min(s => s.Number);
            var highestSeatNo       = seatsForReservation.Max(s => s.Number);

            return(Math.Abs(highestSeatNo - lowestSeatNo) + 1 == seatsForReservation.Count());
        }
コード例 #6
0
ファイル: CoronaRule.cs プロジェクト: EnvyIT/apollo
        public bool IsValid(IEnumerable <SeatDto> seatData, IEnumerable <SeatDto> desiredSeats)
        {
            var seatDataList     = seatData.ToList();
            var desiredSeatsList = desiredSeats.ToList();

            ValidationHelper.ValidateEnumerableIsNotNullOrEmpty(Logger.Here(), seatDataList, nameof(seatData));
            ValidationHelper.ValidateEnumerableIsNotNullOrEmpty(Logger.Here(), desiredSeatsList, nameof(desiredSeatsList));

            var seatLayout = GetSeatLayout(seatDataList, desiredSeatsList);

            return(desiredSeatsList.All(seat => ValidateNeighbors(seatLayout, seat.LayoutRow, seat.LayoutColumn)));
        }
コード例 #7
0
ファイル: UserController.cs プロジェクト: EnvyIT/apollo
        public async Task <ActionResult <RoleDto> > GetRole()
        {
            var uuid = JwtHelper.GetUuidFromClaims(HttpContext.User.Claims);

            if (uuid == null)
            {
                Logger.Here().Error("Request with invalid JWT");
                return(BadRequestResponse("JWT invalid"));
            }
            var user = await _service.CreateUserService().GetUserWithAddressByUuidAsync(uuid);

            Logger.Here().Info("{Role} extracted from claims for {user}", user.Role, user);
            return(user.Role);
        }
コード例 #8
0
 public async Task TransactionAsync(decimal amount, string description, TPayment paymentData)
 {
     try
     {
         Logger.Here().Info("Start payment transaction");
         await CallTransaction(amount, description, ConvertPayment(paymentData));
     }
     catch (PaymentException exception)
     {
         Logger.Here().Error(exception, "{Error} during payment transaction", nameof(exception.Error));
         throw;
     }
     catch (Exception exception)
     {
         Logger.Here().Error(exception, "Unknown error during payment transaction");
         throw new PaymentException(PaymentError.Unknown, "Unknown error", exception);
     }
     Logger.Here().Info("Finished payment transaction");
 }
コード例 #9
0
ファイル: ReservationService.cs プロジェクト: EnvyIT/apollo
        private async Task <ReservationDto> TryAddReservationAsync(IEnumerable <SeatDto> seatDtos, long scheduleId, long userId)
        {
            ValidateEnumerableIsNotNullOrEmpty(Logger, seatDtos, nameof(seatDtos));
            var schedule = await _unitOfWork.RepositorySchedule.GetScheduleByIdAsync(scheduleId);

            ValidateNull(Logger.Here(), schedule);

            var dateTimeUtcNow = DateTime.UtcNow;

            ValidateLessOrEquals(Logger.Here(), dateTimeUtcNow, schedule.StartTime);

            var user = await _unitOfWork.RepositoryUser.GetUserWithAllReferencesByIdAsync(userId);

            ValidateLessOrEquals(Logger.Here(), seatDtos.Count(), user.Role.MaxReservations);

            var seatLayout = (await _infrastructureService.GetLayout(Map(schedule)));
            var flatLayout = seatLayout.Cast <SeatDto>()
                             .Where(s => s != null)
                             .ToList();


            ApplyValidation(seatDtos, flatLayout);

            var seats         = seatDtos.Select(Map).ToList();
            var reservationId = await _unitOfWork.RepositoryTicket.AddReservationAsync(seats, scheduleId, userId);

            ValidateId <ReservationService, long>(Logger.Here(), reservationId);
            return(Map(await _unitOfWork.RepositoryTicket.GetReservationByIdAsync(reservationId)));
        }
コード例 #10
0
ファイル: DownloadHelper.cs プロジェクト: EnvyIT/apollo
        }                            //to be able to use Logger and prevent creation of Instances

        #endregion


        #region StaticMethods
        public static async Task <string> FetchStreamUrl(string trailerUrl, string pattern)
        {
            if (string.IsNullOrWhiteSpace(trailerUrl))
            {
                return(null);
            }

            var restClient = new RestClient(trailerUrl);
            var request    = new RestRequest("#", Method.GET, DataFormat.Json);
            var jsonSite   = await restClient.ExecuteAsync(request);

            var content = Regex.Match(jsonSite.Content, pattern, RegexOptions.IgnoreCase);

            if (content.Success)
            {
                Logger.Here().Info($"Fetched request URL successfully for trailer {trailerUrl}");
                return(content.Groups[0].Value.Substring(0, content.Groups[0].Value.Length - 2));
            }

            return(null);
        }
コード例 #11
0
 public async Task <ActionResult <IList <CinemaHallDto> > > GetCinemaHalls()
 {
     Logger.Here().Info(nameof(GetCinemaHalls));
     return((await _service.CreateInfrastructureService().GetActiveCinemaHallsAsync()).ToList());
 }
コード例 #12
0
ファイル: Mapper.cs プロジェクト: EnvyIT/apollo
 public static ActorDto Map(Actor actor)
 {
     ValidateNull(Logger.Here(), actor);
     return(new ActorDto
     {
         Id = actor.Id,
         RowVersion = actor.RowVersion,
         LastName = actor.LastName,
         FirstName = actor.FirstName
     });
 }
コード例 #13
0
ファイル: ScheduleController.cs プロジェクト: EnvyIT/apollo
 public async Task <ActionResult <IList <ScheduleDto> > > GetSchedules(DateTime day)
 {
     Logger.Here().Info("{GetSchedules} from {day}", nameof(GetSchedules), day.ToShortDateString());
     return((await GetSchedulesByDay(day)).ToList());
 }
コード例 #14
0
 public async Task <IEnumerable <SeatDto> > GetActiveSeatsFromCinemaHallByCategoriesAsync(long cinemaHallId,
                                                                                          IEnumerable <long> categoryIds)
 {
     ValidateNull(Logger.Here(), categoryIds);
     return((await _unitOfWork.RepositoryInfrastructure.GetActiveSeatsFromCinemaHallByCategoryAsync(cinemaHallId,
                                                                                                    categoryIds))
            .Select(Map));
 }
コード例 #15
0
 public async Task <ActionResult <IEnumerable <GenreDto> > > GetGenre()
 {
     Logger.Here().Info("{GetActors}", nameof(GetActors));
     return((await _service.CreateMovieService().GetActiveGenresAsync()).ToList());
 }
コード例 #16
0
ファイル: ScheduleService.cs プロジェクト: EnvyIT/apollo
        public async Task <ScheduleDto> AddScheduleAsync(ScheduleDto newSchedule)
        {
            ValidateNull(Logger.Here(), newSchedule);
            var id = await _unitOfWork.RepositorySchedule.AddScheduleAsync(Map(newSchedule));

            if (id <= 0L)
            {
                return(null);
            }

            newSchedule.Id = id;
            return(newSchedule);
        }