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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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();
 }
Ejemplo n.º 7
0
        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));
        }