예제 #1
0
        private async Task CreateProduct(string cookieValueFromReq, Image img, ObjectsInCanvas objectsInCanvas)
        {
            string             applicationPath    = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            string             path               = $"{applicationPath}/wwwroot/received/{cookieValueFromReq.Substring(Math.Max(0, cookieValueFromReq.Length - 10))}";
            OrderDataViewModel orderDataViewModel = new OrderDataViewModel();
            var fullPath = path;

            //NOT SURE IF WE WANT THAT
            if (!Directory.Exists(path))
            {
                DirectoryInfo di = Directory.CreateDirectory(path);
                fullPath = $"{di}/{Guid.NewGuid()}.png";
                img.Save(fullPath, ImageFormat.Png);
            }
            else
            {
                fullPath = $"{path}/{Guid.NewGuid()}.png";
                img.Save(fullPath, ImageFormat.Png);
            }
            double count      = 0;
            var    canConvert = double.TryParse(objectsInCanvas.Count, out count);

            if (!canConvert || double.Parse(objectsInCanvas.Count) <= 0)
            {
                objectsInCanvas.Count = "1";
            }

            var splitPath = fullPath.Split("/").TakeLast(3).ToList();

            orderDataViewModel.SessionId        = cookieValueFromReq;
            orderDataViewModel.DesignName       = splitPath[2];
            orderDataViewModel.DesignFolderPath = splitPath[0] + "/" + splitPath[1];
            orderDataViewModel.Size             = objectsInCanvas.Size;
            orderDataViewModel.Count            = int.Parse(objectsInCanvas.Count);
            orderDataViewModel.Price            = await __productService.GetPriceForSizeGeneric(orderDataViewModel.Size).ConfigureAwait(false);

            orderDataViewModel.ProductId = splitPath[2];
            orderDataViewModel.Sum       = orderDataViewModel.Price * orderDataViewModel.Count;
            // orderDataViewModel.SessionId = Request.Cookies[cookie];
            StringBuilder sb = new StringBuilder();
            StringWriter  sw = new StringWriter(sb);
            var           listTextOrderDataViewModel = new List <TextOrderDataViewModel>();

            using (JsonDocument document = JsonDocument.Parse(objectsInCanvas.Objects))
            {
                JsonElement root = document.RootElement;
                using (JsonWriter writer = new JsonTextWriter(sw))
                {
                    foreach (JsonElement obj in root.EnumerateArray())
                    {
                        if (obj.GetProperty("type").ToString() == "text")
                        {
                            writer.Formatting = Formatting.Indented;

                            writer.WriteStartObject();
                            writer.WritePropertyName("backgroundColor");
                            writer.WriteValue(obj.GetProperty("backgroundColor").ToString());
                            writer.WritePropertyName("fontWeight");
                            writer.WriteValue(obj.GetProperty("fontWeight").ToString());
                            writer.WritePropertyName("text");
                            writer.WriteValue(obj.GetProperty("text").ToString());
                            writer.WritePropertyName("fontWeight");
                            writer.WriteValue(obj.GetProperty("fontWeight").ToString());
                            writer.WritePropertyName("fontSize");
                            writer.WriteValue(obj.GetProperty("fontSize").ToString());
                            writer.WritePropertyName("stroke");
                            writer.WriteValue(obj.GetProperty("stroke").ToString());
                            writer.WritePropertyName("fill");
                            writer.WriteValue(obj.GetProperty("fill").ToString());
                            writer.WritePropertyName("fontFamily");
                            writer.WriteValue(obj.GetProperty("fontFamily").ToString());
                            writer.WritePropertyName("underline");
                            writer.WriteValue(obj.GetProperty("underline").ToString());
                            writer.WritePropertyName("overline");
                            writer.WriteValue(obj.GetProperty("overline").ToString());
                            writer.WritePropertyName("fontStyle");
                            writer.WriteValue(obj.GetProperty("fontStyle").ToString());
                            writer.WriteEndObject();
                            var textOrderDataViewModel = JsonConvert.DeserializeObject <TextOrderDataViewModel>(sb.ToString());
                            textOrderDataViewModel.UserSessionId = cookieValueFromReq;
                            listTextOrderDataViewModel.Add(textOrderDataViewModel);
                            sb.Clear();
                        }
                    }
                }
                var userSessionDto = _mapper.Map <UserSessionCartDto>(orderDataViewModel);
                var userTextList   = _mapper.Map <List <UserTextSessionDto> >(listTextOrderDataViewModel);
                var cartItemDto    = await __orderService.SaveToCart(userSessionDto, userTextList).ConfigureAwait(false);

                var userId = cookieValueFromReq;

                List <CartViewModel> itemsInCache;
                if (!_cache.TryGetValue($"CartViewModel{userId}", out itemsInCache))
                {
                    itemsInCache = new List <CartViewModel>();
                    _cache.Set($"CartViewModel{userId}", itemsInCache);
                }
                itemsInCache = _cache.Get($"CartViewModel{userId}") as List <CartViewModel>;
                var cartItem = _mapper.Map <CartViewModel>(cartItemDto);
                itemsInCache.Add(cartItem);
                _cache.Remove($"CartViewModel{userId}");
                _cache.Set($"CartViewModel{userId}", itemsInCache);
            }
        }
예제 #2
0
        public async Task <IActionResult> AddToCart([FromBody] CartViewModel cartViewModels)
        {
            string sessionCookie = "BeachTowelShop-Session";

            if (!Request.Cookies.ContainsKey(sessionCookie))
            {
                await Set("BeachTowelShop-Session", Guid.NewGuid().ToString(), 100);
            }
            if (Request.Cookies[sessionCookie] == null)
            {
                return(BadRequest());
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            double count      = 0;
            var    canConvert = double.TryParse(cartViewModels.Count, out count);

            if (!canConvert)
            {
                cartViewModels.Count = "1";
            }

            var userId = Request.Cookies[sessionCookie];
            OrderDataViewModel orderDataViewModel = new OrderDataViewModel();

            orderDataViewModel.Count            = int.Parse(cartViewModels.Count);
            orderDataViewModel.DesignFolderPath = cartViewModels.DesignFolderPath;
            orderDataViewModel.DesignName       = cartViewModels.DesignName;
            if (orderDataViewModel.DesignName == null)
            {
                var values = orderDataViewModel.DesignFolderPath.Split("/");
                orderDataViewModel.DesignFolderPath = values[0];
                orderDataViewModel.DesignName       = values[1];
            }
            var doesIdExist = await __productService.VerifyId(cartViewModels.ProductId).ConfigureAwait(false);

            if (!doesIdExist)
            {
                return(NotFound());
            }
            orderDataViewModel.Size = cartViewModels.Size;



            orderDataViewModel.Price = await __productService.GetPriceForSize(orderDataViewModel.Size, cartViewModels.ProductId).ConfigureAwait(false);

            orderDataViewModel.ProductId = cartViewModels.ProductId;
            orderDataViewModel.SessionId = Request.Cookies[sessionCookie];
            orderDataViewModel.Sum       = orderDataViewModel.Price * orderDataViewModel.Count;

            var userSessionDto = _mapper.Map <UserSessionCartDto>(orderDataViewModel);

            var updateItem = await __orderService.SaveItemToCart(userSessionDto).ConfigureAwait(false);

            List <CartViewModel> itemsInCache;

            if (!_cache.TryGetValue($"CartViewModel{userId}", out itemsInCache))
            {
                itemsInCache = new List <CartViewModel>();
                _cache.Set($"CartViewModel{userId}", itemsInCache);
            }
            itemsInCache = _cache.Get($"CartViewModel{userId}") as List <CartViewModel>;
            var cartItem     = _mapper.Map <CartViewModel>(updateItem);
            var itemToRemove = itemsInCache.Where(a => a.SessionId == updateItem.UserSessionId && a.ProductId == updateItem.ProductId && a.Size == updateItem.Size).FirstOrDefault();

            if (itemToRemove != null)
            {
                itemsInCache.Remove(itemToRemove);
            }
            itemsInCache.Add(cartItem);
            //_cache.Remove($"CartViewModel{userId}");
            _cache.Set($"CartViewModel{userId}", itemsInCache);

            return(Ok("Towel added to the cart"));
        }