public async Task <ApiResponse <PromoCodeDTO> > CreatePromoCode(CreatePromoCodeDTO model)
        {
            ApiResponse <PromoCodeDTO> result = new ApiResponse <PromoCodeDTO>();

            try
            {
                PromoCode promoCodeToCreate = new PromoCode();
                promoCodeToCreate.CreationDate       = DateTime.Now;
                promoCodeToCreate.ExpiryDate         = model.ExpiryDate;
                promoCodeToCreate.OriginalUsageCount = model.UsageCount;
                promoCodeToCreate.UsageCount         = model.UsageCount;
                promoCodeToCreate.DiscountRate       = model.DiscountRate;

                if (model.DiscountRate > 100)
                {
                    result.Succeeded = false;
                    result.Errors.Add("Error creating promo code , discount rate is more than 100% !");
                    return(result);
                }

                if (model.ExpiryDate < DateTime.Now)
                {
                    result.Succeeded = false;
                    result.Errors.Add("Please enter a valid expiry date !");
                    return(result);
                }

                string code;

                while (true)
                {
                    code = HelperFunctions.GenerateRandomNumber();

                    var promoCodeResult = await unitOfWork.PromoCodeManager.GetAsync(a => a.Code == code);

                    List <PromoCode> promoCodesList = promoCodeResult.ToList();

                    if (promoCodesList.Count == 0)
                    {
                        break;
                    }
                }


                promoCodeToCreate.Code = code;

                var createPromoCodeResult = await unitOfWork.PromoCodeManager.CreateAsync(promoCodeToCreate);

                await unitOfWork.SaveChangesAsync();

                if (createPromoCodeResult != null)
                {
                    result.Data      = mapper.Map <PromoCodeDTO>(createPromoCodeResult);
                    result.Succeeded = true;
                    return(result);
                }
                else
                {
                    result.Succeeded = false;
                    result.Errors.Add("Error creating promo code");
                    return(result);
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
                return(result);
            }
        }
Esempio n. 2
0
 public async Task <IActionResult> CreatePromoCode(CreatePromoCodeDTO model)
 {
     return(await AddItemResponseHandler(async() => await service.CreatePromoCode(model)));
 }