public async Task <IActionResult> CreateImg([FromBody] ObjectsInCanvas objectsInCanvas) { if (!ModelState.IsValid) { return(BadRequest("Bad request 400")); } var base64String = objectsInCanvas.Design.Split(",")[1]; byte[] imageBytes = Convert.FromBase64String(base64String); using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length)) { ms.Write(imageBytes, 0, imageBytes.Length); var img = System.Drawing.Image.FromStream(ms, true); string cookie = "BeachTowelShop-Session"; if (!Request.Cookies.ContainsKey(cookie)) { await Set("BeachTowelShop-Session", Guid.NewGuid().ToString(), 100); } if (Request.Cookies[cookie] != null) { string cookieValueFromReq = Request.Cookies[cookie]; await CreateProduct(cookieValueFromReq, img, objectsInCanvas).ConfigureAwait(false); } } return(Ok("Added to Cart")); }
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); } }