public async Task <ProcessingVoucherError> ProcessPaymentRequestAsync(Guid paymentRequestId) { var voucherShortCode = await _paymentRequestsRepository.GetVoucherShortCodeAsync(paymentRequestId); var voucher = await _vouchersRepository.GetByShortCodeAsync(voucherShortCode); if (voucher == null) { return(ProcessingVoucherError.VoucherNotFound); } if (voucher.OwnerId == null) { _log.Error(message: "Reserved voucher with missing owner", context: voucher); throw new InvalidOperationException("Reserved voucher with missing owner"); } var voucherCampaign = await _campaignsRepository.GetByIdAsync(voucher.CampaignId, false); if (voucherCampaign == null) { return(ProcessingVoucherError.VoucherCampaignNotFound); } voucher.Status = VoucherStatus.Sold; await _vouchersRepository.UpdateAsync(voucher); await PublishVoucherSoldEvent(paymentRequestId, voucherCampaign, voucher); return(ProcessingVoucherError.None); }
public async Task <UpdateCampaignError> UpdateAsync(VoucherCampaign campaign) { var oldCampaign = await _campaignsRepository.GetByIdAsync(campaign.Id, true); if (oldCampaign == null) { _log.Error($"Campaign {campaign.Id} not found for update"); return(UpdateCampaignError.VoucherCampaignNotFound); } if (oldCampaign.State == CampaignState.Published && oldCampaign.FromDate <= DateTime.UtcNow) { return(UpdateCampaignError.CampaignAlreadyStarted); } if (campaign.VouchersTotalCount < oldCampaign.BoughtVouchersCount) { return(UpdateCampaignError.TotalCountMustBeGreaterThanBoughtVouchersCount); } campaign.CreatedBy = oldCampaign.CreatedBy; campaign.CreationDate = oldCampaign.CreationDate; if (campaign.LocalizedContents != null) { for (int i = 0; i < campaign.LocalizedContents.Count; ++i) { if (!string.IsNullOrWhiteSpace(campaign.LocalizedContents[i].Value)) { continue; } campaign.LocalizedContents.RemoveAt(i); --i; } } var contentsToRemove = oldCampaign.LocalizedContents .Where(c1 => campaign.LocalizedContents.All(c2 => c1.Id != c2.Id)) .ToList(); await _campaignContentsRepository.DeleteAsync(contentsToRemove); foreach (var content in contentsToRemove) { if (content.ContentType == CampaignContentType.ImageUrl) { await _fileService.DeleteAsync(content.Id); } } await _campaignsRepository.UpdateAsync(campaign); _log.Info("Campaign was updated", context: campaign); return(UpdateCampaignError.None); }
public async Task <ProcessingVoucherError> ProcessPaymentRequestAsync(Guid paymentRequestId) { var voucherShortCode = await _paymentRequestsRepository.GetVoucherShortCodeAsync(paymentRequestId); var voucher = await _vouchersRepository.GetByShortCodeAsync(voucherShortCode); if (voucher == null) { return(ProcessingVoucherError.VoucherNotFound); } if (voucher.OwnerId == null) { _log.Error(message: "Reserved voucher with missing owner", context: voucher); throw new InvalidOperationException("Reserved voucher with missing owner"); } var voucherCampaign = await _campaignsRepository.GetByIdAsync(voucher.CampaignId, false); if (voucherCampaign == null) { return(ProcessingVoucherError.VoucherCampaignNotFound); } voucher.Status = VoucherStatus.Sold; await _vouchersRepository.UpdateAsync(voucher); await _voucherSoldPublisher.PublishAsync(new SmartVoucherSoldEvent { Amount = voucherCampaign.VoucherPrice, Currency = voucherCampaign.Currency, CustomerId = voucher.OwnerId.Value, PartnerId = voucherCampaign.PartnerId, Timestamp = DateTime.UtcNow, CampaignId = voucher.CampaignId, VoucherShortCode = voucher.ShortCode, PaymentRequestId = paymentRequestId.ToString(), }); return(ProcessingVoucherError.None); }