public async Task <Tour> AddAsync(Tour tour, IFormFileCollection images)
        {
            foreach (var file in images.AsEnumerable())
            {
                using var stream = file.OpenReadStream();
                string url = await _remoteFileStorageHandler.UploadAsync(stream, "jpg");

                tour.ImageUrls.Add(url);
            }

            await _dbContext.AddAsync(tour);

            return(tour);
        }
        public async Task <Post> AddAsync(Post post, IFormFile coverImg)
        {
            if (coverImg != null)
            {
                using var stream = coverImg.OpenReadStream();
                post.CoverImgUrl = await _remoteFileStorageHandler.UploadAsync(stream, "jpg");
            }

            _doc.LoadHtml(post.Content);

            var imageUrls = await _doc.ProcessBase64Images(_remoteFileStorageHandler);

            post.ImageUrls.AddRange(imageUrls);
            post.Content     = _doc.DocumentNode.InnerHtml;
            post.LastUpdated = DateTime.Now;

            await _dbContext.Posts.AddAsync(post);

            return(post);
        }
        // Parse images that use Base64 string for src attribute, upload to remote storage and replace src with hosted image url
        public static async Task <IEnumerable <string> > ProcessBase64Images(this HtmlDocument doc, IRemoteFileStorageHandler remoteFileStorageHandler)
        {
            List <string> uploadedImgUrls = new();
            var           imgTags         = doc.DocumentNode.SelectNodes("//img");

            if (imgTags != null)
            {
                foreach (var img in imgTags)
                {
                    var src = img.Attributes["src"].Value;
                    // Upload image and set src to the image url
                    if (src.StartsWith("data:image"))
                    {
                        var stream = new MemoryStream(Convert.FromBase64String(src.Split(";base64,")[1]));
                        src = await remoteFileStorageHandler.UploadAsync(stream, "jpg");

                        img.Attributes["src"].Value = src;
                    }
                    uploadedImgUrls.Add(src);
                }
            }
            return(uploadedImgUrls);
        }