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); } }
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")); }