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); }
public async Task <PostCreateCouponResponse> CreateCouponAsync(PostCreateCouponRequest request) { var executionStrategy = _unitOfWork.CreateExecutionStrategy(); var response = await executionStrategy.ExecuteAsync(() => CreateCouponBodyAsync(request)); return(response); }
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); }
public async Task <IActionResult> CreateCouponAsync(PostCreateCouponRequest request) { var response = await _paymentService.CreateCouponAsync(request); return(StatusCode(StatusCodes.Status201Created, response)); }