Esempio n. 1
0
        public async Task <bool> CreateCakeOrder(CakeOrderViewModel model, CancellationToken ct = default(CancellationToken))
        {
            Customer cus         = _customerRepository.GetByIdentityId(model.IdentityId);
            var      initialData = await this.GetInitialData();

            //calculate total price again
            List <string> toppings = model.Toppings.Split(',').ToList();
            ICake         cake     = initialData.CakeShapes.Where(x => x.Code.Trim() == model.ShapeCode.Trim()).FirstOrDefault();

            cake.Toppings    = initialData.Toppings.Where(w => toppings.Any(code => code.Trim() == w.Code.Trim())).ToList();
            cake.Message     = model.Message;
            cake.Size        = model.Size;
            model.TotalPrice = cake.CalculatePrice();
            CakeOrder order = new CakeOrder();

            order.CustomerId = cus.Id;
            order.Message    = model.Message;
            order.ShapeCode  = model.ShapeCode;
            order.Size       = model.Size;
            order.TotalPrice = model.TotalPrice;

            order = await _cakeOrderRepository.AddAsync(order);

            foreach (var topping in cake.Toppings)
            {
                Topping toppingEntity = new Topping();
                toppingEntity.CakeOrderId = order.Id;
                toppingEntity.Code        = topping.Code;
                await _toppingRepository.AddAsync(toppingEntity);
            }
            return(true);
        }
Esempio n. 2
0
        public async Task <CakeOrderViewModel> CalculateTotalPrice(CakeOrderViewModel model)
        {
            if (!string.IsNullOrEmpty(model.ShapeCode))
            {
                var initialData = await this.GetInitialData();

                List <string> toppings = new List <string>();
                if (model.Toppings != null)
                {
                    toppings = model.Toppings.Split(',').ToList();
                }

                ICake cake = initialData.CakeShapes.Where(x => x.Code.Trim() == model.ShapeCode.Trim()).FirstOrDefault();
                cake.Toppings    = initialData.Toppings.Where(w => toppings.Any(code => code == w.Code)).ToList();
                cake.Message     = model.Message;
                cake.Size        = model.Size;
                model.TotalPrice = cake.CalculatePrice();
            }
            else
            {
                model.TotalPrice = 0;
            }

            return(model);
        }
Esempio n. 3
0
        public async Task <ServiceResponse <IList <CakeOrderViewModel> > > GetAllCakeOrdersAsync(OrderStatus status)
        {
            var serviceResponse = new ServiceResponse <IList <CakeOrderViewModel> >();

            var orders = await _cakeOrderRepository
                         .GetAll()
                         .ConfigureAwait(false);

            if (orders == null)
            {
                serviceResponse.ServiceResponseStatus = ServiceResponseStatus.NotFound;
                return(serviceResponse);
            }

            var cakeOrderEntities = orders.Where(e => e.OrderStatus == status).Include("User").ToList();
            var cakeOrders        = new List <CakeOrderViewModel>();

            foreach (var order in cakeOrderEntities)
            {
                var vm = new CakeOrderViewModel(order, order.User);
                cakeOrders.Add(vm);
            }

            serviceResponse.ServiceResponseStatus = ServiceResponseStatus.Ok;
            serviceResponse.Content = cakeOrders;

            return(serviceResponse);
        }
Esempio n. 4
0
        public ServiceResponse <IList <CakeOrderViewModel> > GetAllCakeOrders()
        {
            var serviceResponse = new ServiceResponse <IList <CakeOrderViewModel> >();

            var ordersQuery = _cakeOrderRepository.GetAll();

            var orders = ordersQuery.Include("User").ToList();

            if (orders.Count == 0)
            {
                serviceResponse.ServiceResponseStatus = ServiceResponseStatus.NotFound;
                return(serviceResponse);
            }

            var cakeOrders = new List <CakeOrderViewModel>();

            foreach (var order in orders)
            {
                var vm = new CakeOrderViewModel(order, order.User);
                cakeOrders.Add(vm);
            }

            serviceResponse.Content = cakeOrders;
            serviceResponse.Message = "all good";
            serviceResponse.ServiceResponseStatus = ServiceResponseStatus.Ok;

            return(serviceResponse);
        }
        public ServiceResponse <IList <CakeOrderViewModel> > GetAllCakeOrders()
        {
            var serviceResponse = new ServiceResponse <IList <CakeOrderViewModel> >();

            var ordersQuery = _cakeOrderRepository.GetAll();   // burada bütün orderları getiriyoruz

            var orders = ordersQuery.Include("User").ToList(); // burada da yukarıdaki orderlara iligli userları ekliyoruz

            if (orders.Count == 0)
            {
                serviceResponse.ServiceResponseStatus = ServiceResponseStatus.NotFound;
                return(serviceResponse);
            }

            var cakeOrders = new List <CakeOrderViewModel>(); // automapper olsaydı onu burada kullanbilirdik, ama şimdi view model i iteration ile aşağıda dolduracağız.

            foreach (var order in orders)
            {
                var vm = new CakeOrderViewModel(order, order.User);
                cakeOrders.Add(vm);
            }

            serviceResponse.Content = cakeOrders;
            serviceResponse.Message = "all good";
            serviceResponse.ServiceResponseStatus = ServiceResponseStatus.Ok;

            return(serviceResponse);
        }
Esempio n. 6
0
        public async Task <IActionResult> Update(CakeOrderViewModel cakeOrder)
        {
            //var order = await _cakeOrderService.UpdateCakeOrderAsync(cakeOrder);
            // yukarıdaki gibiydi ancak update sonrası bunu bir yerde kullanmayacağımız için /eşitliğin sağ tarafı update servis üzerindne veritabanına yazıp geldi) burada yeniden herhangi bir değişkene atmaya gerek olmadığında discard yaptı.

            var _ = await _cakeOrderService.UpdateCakeOrderAsync(cakeOrder);

            //Sonra da aşağıdaki gib index e döndük.
            //return View();

            return(RedirectToAction("Index"));
        }
        public async Task <IActionResult> Post([FromBody] CakeOrderViewModel model, CancellationToken ct = default(CancellationToken))
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var userId = _caller.Claims.Single(c => c.Type == "id");

            model.IdentityId = userId.Value;

            var result = await _cakeOrderService.CreateCakeOrder(model, ct);

            return(new OkObjectResult("Cake Order completed !"));
        }
Esempio n. 8
0
 public async Task <IActionResult> CalculateTotalCost(string shape, string toppings, int size, string message)
 {
     try
     {
         CakeOrderViewModel cakeOrderViewModel = new CakeOrderViewModel();
         cakeOrderViewModel.ShapeCode = shape;
         cakeOrderViewModel.Toppings  = toppings;
         cakeOrderViewModel.Size      = size;
         cakeOrderViewModel.Message   = message;
         if (await _cakeOrderService.CalculateTotalPrice(cakeOrderViewModel) == null)
         {
             return(NotFound());
         }
         return(Ok(await _cakeOrderService.CalculateTotalPrice(cakeOrderViewModel)));
     }
     catch (Exception ex)
     {
         return(StatusCode(500, ex));
     }
 }
        public async Task <IActionResult> Update(CakeOrderViewModel cakeOrder)
        {
            var _ = await _cakeOrderService.UpdateCakeOrderAsync(cakeOrder);

            return(RedirectToAction("Index"));
        }
Esempio n. 10
0
        public async Task <ServiceResponse <CakeOrderViewModel> > UpdateOrderStatusAsync(CakeOrderViewModel vm)
        {
            var serviceResponse = new ServiceResponse <CakeOrderViewModel>();
            var entity          = await _cakeOrderRepository.GetById(vm.Id);

            entity.OrderStatus = vm.OrderStatus;
            var cakeOrderEntity = await _cakeOrderRepository.Update(entity);

            serviceResponse.ServiceResponseStatus = ServiceResponseStatus.Ok;
            serviceResponse.Content = vm;

            await _notificationHandler.SendNotification(cakeOrderEntity.Id);

            return(serviceResponse);
        }
Esempio n. 11
0
        public async Task <ServiceResponse <CakeOrderViewModel> > UpdateCakeOrderAsync(CakeOrderViewModel cakeOrder)
        {
            var response = new ServiceResponse <CakeOrderViewModel>();

            var entity = await _cakeOrderRepository.GetCakeOrderByIdAsync(cakeOrder.Id);

            entity.OrderStatus = cakeOrder.OrderStatus;

            var cakeOrderEntity = await _cakeOrderRepository.UpdateAsync(entity);

            var serviceResponse = await _notificationHandler.SendNotification(cakeOrderEntity);

            response.Content = cakeOrder;
            response.ServiceResponseStatus = serviceResponse.ServiceResponseStatus;
            response.Message = serviceResponse.Message;

            return(response);
        }
Esempio n. 12
0
        public async Task <ServiceResponse <CakeOrderViewModel> > UpdateCakeOrderAsync(CakeOrderViewModel cakeOrder)
        {
            var response = new ServiceResponse <CakeOrderViewModel>();

            var entity = await _cakeOrderRepository.GetCakeOrderByIdAsync(cakeOrder.Id);

            entity.OrderStatus = cakeOrder.OrderStatus; // update de sadece status ü günceleyebiliyoruz şu an için. O yüzden o alanın viewden gelen değerini entity deki değere atıyoruz.// burada statu admin tarafından yönetim panelinden accepted e çevrilecek. ve sonrasında email göndereceğiz.

            //if (entity.OrderStatus == OrderStatus.Accepted) // bu bölümü NotificationHandler oluşturunca yorum haliine getirdik. Aşağıda notificationHandler ı çağırıp oradan dönen serviceResponse ile işlem iyapıyoruz artık. Mesaj gönderme ve email gönderme order ın statuüsne göre otomatik olacak.. accepted ise email, completed ise whatsapp mesajı gidecek otomatik olarak Twilio üzerinden.
            //{
            //    var emailResponse = await _emailService.SendEmail(entity);
            //}

            var cakeOrderEntity = await _cakeOrderRepository.UpdateAsync(entity);

            var serviceResponse = await _notificationHandler.SendNotification(cakeOrderEntity);

            response.Content = cakeOrder;
            response.ServiceResponseStatus = serviceResponse.ServiceResponseStatus;
            response.Message = serviceResponse.Message;

            return(response);
        }
Esempio n. 13
0
        public async Task <IActionResult> Update(CakeOrderViewModel model)
        {
            var order = await _cakeOrderService.UpdateOrderStatusAsync(model);

            return(RedirectToAction("Orders"));
        }