public async Task <bool> CheckDuplicateCampaign(DiscountCampaignRequestViewModel discountCampaignRequestViewModel) { switch (discountCampaignRequestViewModel.CodeType) { case CodeType.BulkCodes: { var discountCampaign = await _discountCampaignRepository.GetByCodePrefix(discountCampaignRequestViewModel.CodePrefix); if (discountCampaign != null) { return(true); } } break; case CodeType.SingleCode: { var discountCode = await _discountCodeRepository.GetDiscountCodeByCode(discountCampaignRequestViewModel .SingleCode); if (discountCode != null) { return(true); } } break; default: throw new ArgumentOutOfRangeException(); } return(false); }
public async Task <ResultViewModel> Post([FromBody] DiscountCampaignRequestViewModel model) { if (!ModelState.IsValid) { return(new ResultViewModel { Status = Status.Error, Message = "Invalid Data" }); } var checkDuplicateCampaign = await _discountCampaignService.CheckDuplicateCampaign(model); if (checkDuplicateCampaign) { return(new ResultViewModel { Status = Status.Error, Message = "Error: Can not create duplicate CodePrefix or Single Code" }); } var discountCampaign = _discountCampaignService.GenerateDiscountCampaignFromViewModel(model); await _discountCampaignRepository.Insert(discountCampaign); return(new ResultViewModel { Status = Status.Success, Message = "Success", Data = discountCampaign }); }
public App.Support.Common.Models.PromotionService.DiscountCampaigns.DiscountCampaign GenerateDiscountCampaignFromViewModel(DiscountCampaignRequestViewModel viewModel) { var discountCampaign = new App.Support.Common.Models.PromotionService.DiscountCampaigns.DiscountCampaign { Id = Guid.NewGuid(), Name = viewModel.Name, DiscountCampaignType = viewModel.DiscountCampaignType, DiscountValue = viewModel.DiscountValue, DiscountUnitId = viewModel.DiscountUnitId, StartDate = viewModel.StartDate, ExpirationDate = viewModel.ExpirationDate, DiscountCampaignApplyOn = viewModel.DiscountCampaignApplyOn, ApplyOnId = viewModel.DiscountCampaignApplyOnId, CodePrefix = viewModel.CodePrefix }; discountCampaign.DiscountValidations = new List <App.Support.Common.Models.PromotionService.DiscountValidations.DiscountValidation>(); foreach (var discountValidation in viewModel.DiscountValidations.Select(viewModelDiscountValidation => _discountValidationService.GenerateDiscountValidationFromViewModel(viewModelDiscountValidation))) { discountCampaign.DiscountValidations.Add(discountValidation); } var discountCodes = _discountCodeService.GenerateDiscountCodesFromDiscountCampaignViewModel(viewModel); discountCampaign.DiscountCodes = discountCodes; return(discountCampaign); }
public ICollection <App.Support.Common.Models.PromotionService.DiscountCodes.DiscountCode> GenerateDiscountCodesFromDiscountCampaignViewModel(DiscountCampaignRequestViewModel viewModel) { ICollection <App.Support.Common.Models.PromotionService.DiscountCodes.DiscountCode> discountCodes = new List <App.Support.Common.Models.PromotionService.DiscountCodes.DiscountCode>(); switch (viewModel.CodeType) { case CodeType.SingleCode: { var discountCode = new App.Support.Common.Models.PromotionService.DiscountCodes.DiscountCode { Id = Guid.NewGuid(), Code = viewModel.SingleCode, NormalizedCode = viewModel.SingleCode.Normalize(), Status = DiscountCodeStatus.Active, MaxRedeem = viewModel.MaxRedeem }; discountCodes.Add(discountCode); break; } case CodeType.BulkCodes: { var count = viewModel.CodesAmount; for (var i = 0; i < count; i++) { var discountCode = new App.Support.Common.Models.PromotionService.DiscountCodes.DiscountCode { Id = Guid.NewGuid(), Code = $"{viewModel.CodePrefix}-{DiscountCodeHelper.RandomString(5)}", Status = DiscountCodeStatus.Active, MaxRedeem = 1 }; discountCode.NormalizedCode = DiscountCodeHelper.ReplaceDash(discountCode.Code).Normalize(); discountCodes.Add(discountCode); } break; } default: throw new ArgumentOutOfRangeException(); } return(discountCodes); }