public async Task <Domain.Entities.Coupon> CreateCouponAsync(PostCreateCouponRequest request)
        {
            var coupon = _mapper.Map <Domain.Entities.Coupon>(request);

            coupon = await _unitOfWork.CouponRepository.CreateAsync(coupon);

            return(coupon);
        }
Ejemplo n.º 2
0
        public async Task <PostCreateCouponResponse> CreateCouponAsync(PostCreateCouponRequest request)
        {
            var executionStrategy = _unitOfWork.CreateExecutionStrategy();

            var response = await executionStrategy.ExecuteAsync(() => CreateCouponBodyAsync(request));

            return(response);
        }
Ejemplo n.º 3
0
        private async Task <PostCreateCouponResponse> CreateCouponBodyAsync(PostCreateCouponRequest request)
        {
            using var transaction = await _unitOfWork.BeginTransactionAsync();

            var promotionCode = new PromotionCode();

            try
            {
                request.RedeemBy  = request.RedeemBy.Date;
                request.BeginDate = DateTime.Today;
                var coupon = await _couponService.CreateCouponAsync(request);

                await _unitOfWork.SaveChangesAsync();

                var couponOptions = new CouponCreateOptions()
                {
                    Id               = coupon.Id.ToString(),
                    Name             = coupon.Name,
                    AmountOff        = (long)(coupon.DiscountPrice * 100),
                    Currency         = "eur",
                    Duration         = "repeating",
                    DurationInMonths = request.DurationInMonths,
                    RedeemBy         = coupon.EndDate,
                };

                await _stripeCouponService.CreateAsync(couponOptions);

                // Hate stripe already
                var promoCodeOptions = new PromotionCodeCreateOptions()
                {
                    Coupon       = coupon.Id.ToString(),
                    Code         = coupon.Name,
                    Restrictions = new()
                    {
                        MinimumAmount         = (long)(coupon.OrderOverPrice * 100),
                        MinimumAmountCurrency = "eur"
                    }
                };

                promotionCode = await _promotionCodeService.CreateAsync(promoCodeOptions);

                promotionCode.Created = promotionCode.Created.Date;

                await transaction.CommitAsync();
            }
            catch (StripeException)
            {
                await transaction.RollbackAsync();

                throw;
            }

            var response = _mapper.Map <PostCreateCouponResponse>(promotionCode);

            return(response);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> CreateCouponAsync(PostCreateCouponRequest request)
        {
            var response = await _paymentService.CreateCouponAsync(request);

            return(StatusCode(StatusCodes.Status201Created, response));
        }