public static PromoCode MapFromModel(ReceivingPromoCodeRequest request, PreferenceDto preference, Partner partner) { var promocode = new PromoCode { PartnerId = partner.Id, Partner = partner, Code = request.PromoCode, ServiceInfo = request.ServiceInfo, BeginDate = DateTime.Now, EndDate = DateTime.Now.AddDays(30), PreferenceId = preference.Id, PartnerManagerId = request.PartnerManagerId }; return(promocode); }
public static PromoCode MapFromModel(ReceivingPromoCodeRequest request, Preference preference, Partner partner) { var promocode = new PromoCode(); promocode.PartnerId = partner.Id; promocode.Partner = partner; promocode.Code = request.PromoCode; promocode.ServiceInfo = request.ServiceInfo; promocode.BeginDate = DateTime.Now; promocode.EndDate = DateTime.Now.AddDays(30); promocode.Preference = preference; promocode.PreferenceId = preference.Id; promocode.PartnerManagerId = request.PartnerManagerId; return(promocode); }
public async Task <IActionResult> ReceivePromoCodeFromPartnerWithPreferenceAsync(Guid id, ReceivingPromoCodeRequest request) { var partner = await _partnersRepository.GetByIdAsync(id); if (partner == null) { return(BadRequest("Партнер не найден")); } var activeLimit = partner.PartnerLimits.FirstOrDefault(x => !x.CancelDate.HasValue && x.EndDate > DateTime.Now); if (activeLimit == null) { return(BadRequest("Нет доступного лимита на предоставление промокодов")); } if (partner.NumberIssuedPromoCodes + 1 > activeLimit.Limit) { return(BadRequest("Лимит на выдачу промокодов превышен")); } if (partner.PromoCodes.Any(x => x.Code == request.PromoCode)) { return(BadRequest("Данный промокод уже был выдан ранее")); } //Получаем предпочтение по имени var preference = await _preferencesRepository.GetByIdAsync(request.PreferenceId); if (preference == null) { return(BadRequest("Предпочтение не найдено")); } PromoCode promoCode = PromoCodeMapper.MapFromModel(request, preference, partner); partner.PromoCodes.Add(promoCode); partner.NumberIssuedPromoCodes++; await _partnersRepository.UpdateAsync(partner); //TODO: Чтобы информация о том, что промокод был выдан парнером была отправлена //в микросервис рассылки клиентам нужно либо вызвать его API, либо отправить событие в очередь _givingPromoCodeToCustomerNotifier.GivePromoCodeToCustomer(promoCode); //TODO: Чтобы информация о том, что промокод был выдан парнером была отправлена //в микросервис администрирования нужно либо вызвать его API, либо отправить событие в очередь if (request.PartnerManagerId.HasValue) { _administrationNotifier.NotifyAdminAboutPartnerManagerPromoCode(request.PartnerManagerId.Value); } return(CreatedAtAction(nameof(GetPartnerPromoCodeAsync), new { id = partner.Id, promoCodeId = promoCode.Id }, null)); }