public static PromoCode MapGromModel(GivePromoCodeRequest request, Preference preference, IEnumerable <Customer> customers) { var promocode = new PromoCode(); promocode.Id = Guid.NewGuid(); promocode.PartnerName = request.PartnerName; 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.Customers = new List <PromoCodeCustomer>(); foreach (var item in customers) { promocode.Customers.Add(new PromoCodeCustomer() { CustomerId = item.Id, Customer = item, PromoCodeId = promocode.Id, PromoCode = promocode }); } ; return(promocode); }
public async Task <ActionResult <PromoCodeShortResponse> > GivePromoCodesToCustomersWithPreferenceAsync( GivePromoCodeRequest request) { if (request == null) { return(BadRequest()); } //предпочтение по имени var preference = await _preferenceRepository.GetFirstWhere( x => x.Name == request.Preference); if (preference == null) { return(BadRequest()); } //Клиенты с указанными предпочтениями var customers = await _customerRepository .GetWhere(c => c.Preferences.Any(x => x.Preference.Id == preference.Id)); var promoCode = PromoCodeMapper.MapFromModel(request, preference, customers); await _promoCodeRepository.CreateAsync(promoCode); var response = new PromoCodeShortResponse(promoCode); return(CreatedAtRoute(null, response)); }
public static PromoCode MapFromModel(GivePromoCodeRequest request, PreferenceDto preference) { var promocode = new PromoCode(); promocode.Id = request.PromoCodeId; promocode.PartnerId = request.PartnerId; promocode.Code = request.PromoCode; promocode.ServiceInfo = request.ServiceInfo; promocode.BeginDate = DateTime.Parse(request.BeginDate); promocode.EndDate = DateTime.Parse(request.EndDate); promocode.Preference = preference; //promocode.PreferenceId = preference.Id; //promocode.Customers = new List<PromoCodeCustomer>(); // foreach (var customer in customers) // { // customer.PromoCodesId.Add(promocode.Id); // // // promocode.Customers.Add(new PromoCodeCustomer() // // { // // // // CustomerId = item.Id, // // Customer = item, // // PromoCodeId = promocode.Id, // // PromoCode = promocode // // }); // }; return(promocode); }
protected override async Task ProcessMessageAsync(string message) { using var scope = _serviceProvider.CreateScope(); var promoCodesRepository = scope.ServiceProvider.GetService <IRepository <PromoCode> >(); var preferencesRepository = scope.ServiceProvider.GetService <IRepository <Preference> >(); var customersRepository = scope.ServiceProvider.GetService <IRepository <Customer> >(); var dto = JsonSerializer.Deserialize <GivePromoCodeToCustomerDto>(message); var preference = await preferencesRepository.GetByIdAsync(dto.PreferenceId); if (preference == null) { throw new InvalidOperationException($"Preference with id {dto.PreferenceId} cannot be processed"); } // Получаем клиентов с этим предпочтением: var customers = await customersRepository .GetWhere(d => d.Preferences.Any(x => x.Preference.Id == preference.Id)); var request = new GivePromoCodeRequest { PreferenceId = dto.PreferenceId, PromoCode = dto.PromoCode, BeginDate = dto.BeginDate, EndDate = dto.EndDate, PartnerId = dto.PartnerId, ServiceInfo = dto.ServiceInfo, PromoCodeId = dto.PromoCodeId }; var promoCode = PromoCodeMapper.MapFromModel(request, preference, customers); await promoCodesRepository.AddAsync(promoCode); }
public static PromoCode MapFromModel( GivePromoCodeRequest request, Preference preference, IEnumerable <Customer> customers) { var promoCode = new PromoCode { Code = request.PromoCode, ServiceInfo = request.ServiceInfo, PartnerName = request.PartnerName, BeginDate = DateTime.Today, EndDate = DateTime.Today.AddDays(30), Preference = preference, Customers = new List <PromoCodeCustomer>(), }; if (customers?.Any() == false) { return(promoCode); } promoCode.Customers = customers .Select(x => new PromoCodeCustomer(promoCode, x)) .ToList(); return(promoCode); }
public Task <IActionResult> GivePromoCodesToCustomersWithPreferenceAsync(GivePromoCodeRequest request) { //TODO: Создать промокод и выдать его клиентам с указанным предпочтением throw new NotImplementedException(); }
public async Task <IActionResult> GivePromoCodesToCustomersWithPreferenceAsync(GivePromoCodeRequest request) { //Получаем предпочтение по имени var preference = await _preferencesRepository.GetByIdAsync(request.PreferenceId); if (preference == null) { return(BadRequest()); } // Получаем клиентов с этим предпочтением: var customers = await _customersRepository .GetWhere(d => d.Preferences.Any(x => x.Preference.Id == preference.Id)); PromoCode promoCode = PromoCodeMapper.MapFromModel(request, preference, customers); await _promoCodesRepository.AddAsync(promoCode); return(CreatedAtAction(nameof(GetPromocodesAsync), new { }, null)); }
public async Task <IActionResult> GivePromoCodesToCustomersWithPreferenceAsync(GivePromoCodeRequest request) { if (request is null) { return(BadRequest("Request is empty")); } var customers = await _customerRepository.GetAllAsync(c => c.CustomerPreferences.Any(p => p.Preference.Name == request.Preference)); var employee = await _employeeRepository.GetEmployeeAsync(e => (e.FirstName + " " + e.LastName) == request.PartnerName); if (customers.Count > 0) { var promocodes = new List <PromoCode>(); foreach (var customer in customers) { var promoCode = _mapper.Map <PromoCode>(request); promoCode.Id = Guid.NewGuid(); promoCode.CustomerId = customer.Id; promoCode.PreferenceId = customer.CustomerPreferences.FirstOrDefault().PreferenceId; promoCode.PartnerManagerId = employee.Id; promocodes.Add(promoCode); } await _promoCodeRepository.CreateBulkAsync(promocodes); } else { var promoCode = _mapper.Map <PromoCode>(request); await _promoCodeRepository.CreateAsync(promoCode); } return(Ok()); }
public async Task <IActionResult> GivePromoCodesToCustomersWithPreferenceAsync(GivePromoCodeRequest request) { //Получаем предпочтение по имени var preference = (await _preferencesGateway.GetPreferencesAsync()).FirstOrDefault( item => item.Id == request.PreferenceId); if (preference == null) { return(BadRequest()); } // Получаем клиентов с этим предпочтением: var customers = await _customersRepository .GetWhere(d => d.PreferencesId.Any(x => x == preference.Id)); PromoCode promoCode = PromoCodeMapper.MapFromModel(request, preference); //Добавляем промокод клинетам foreach (var customer in customers) { customer.PromoCodesId.Add(promoCode.Id); await _customersRepository.UpdateAsync(customer); } await _promoCodesRepository.AddAsync(promoCode); return(CreatedAtAction(nameof(GetPromocodesAsync), new { }, null)); }