public async Task <bool> AddAsync(CrawledPostDto model) { _sqlConnection.Open(); var transaction = await _sqlConnection.BeginTransactionAsync(); try { var post = new Post(); post.UpdateWith(model); post.InsertDateMi = DateTime.Now; post.InsertDateSh = PersianDateTime.Now.ToString(PersianDateTimeFormat.Date); var postId = _sqlConnection.ExecuteSpCommand <int>("[Instagram].[InsertPost]", new { Post = post.ToTableValuedParameter("[dbo].[Tvp_Post]") }, transaction).FirstOrDefault(); if (postId <= 0) { return(false); } if (!model.IsAlbum) { var postAsset = new PostAsset(); postAsset.UpdateWith(model); postAsset.PostId = postId; postAsset.InsertDateMi = DateTime.Now; postAsset.InsertDateSh = PersianDateTime.Now.ToString(PersianDateTimeFormat.Date); await _sqlConnection.ExecuteSpCommandAsync <int>("[Instagram].[InsertPostAsset]", new { PostAsset = postAsset.ToTableValuedParameter("[dbo].[Tvp_PostAsset]") }, transaction); } else { var postAssetList = new List <PostAsset>(); foreach (var item in model.Items) { var postAsset = new PostAsset(); postAsset.UpdateWith(item); postAsset.PostId = postId; postAsset.InsertDateMi = DateTime.Now; postAsset.InsertDateSh = PersianDateTime.Now.ToString(PersianDateTimeFormat.Date); postAssetList.Add(postAsset); } await _sqlConnection.ExecuteSpCommandAsync <int>("[Instagram].[InsertPostAsset]", new { PostAsset = postAssetList.ToTableValuedParameter("[dbo].[Tvp_PostAsset]") }, transaction); } transaction.Commit(); _sqlConnection.Close(); return(true); } catch (Exception e) { FileLoger.Error(e); transaction.Rollback(); _sqlConnection.Close(); if (e.Message.Contains("unique index")) { return(true); } return(false); } }
private CrawledPostDto ConvertToCrawledPostDto(edges post) { var newPost = new CrawledPostDto(); switch (post.node.__typename) { case "GraphImage": { newPost.Type = FileType.Image; newPost.FileUrl = post.node.display_url; newPost.ThumbnailUrl = post.node.thumbnail_src; newPost.Dimension = post.node.dimensions.width + "*" + post.node.dimensions.height; break; } case "GraphVideo": { newPost.Type = FileType.Video; newPost.FileUrl = post.node.video_url; newPost.ThumbnailUrl = post.node.thumbnail_src; newPost.ViewCount = post.node.video_view_count; newPost.Dimension = post.node.dimensions.width + "*" + post.node.dimensions.height; break; } case "GraphSidecar": { newPost.IsAlbum = true; newPost.Type = FileType.Unknown; newPost.Items = new List <CrawledPostDto>(); foreach (var item in post.node.edge_sidecar_to_children.edges) { #region Set PostItem Property var newPostItem = new CrawledPostDto(); switch (item.node.__typename) { case "GraphImage": { newPostItem.Type = FileType.Image; newPostItem.FileUrl = item.node.display_url; newPostItem.ThumbnailUrl = item.node.thumbnail_src; newPostItem.Dimension = item.node.dimensions.width + "*" + item.node.dimensions.height; break; } case "GraphVideo": { newPostItem.Type = FileType.Video; newPostItem.FileUrl = item.node.video_url; newPostItem.ThumbnailUrl = item.node.display_url; newPostItem.ViewCount = item.node.video_view_count; newPostItem.Dimension = item.node.dimensions.width + "*" + item.node.dimensions.height; break; } } newPostItem.UniqueId = item.node.id; newPost.Items.Add(newPostItem); #endregion } break; } } newPost.UniqueId = post.node.id; newPost.LikeCount = post.node.edge_Media_Preview_Like.count; newPost.CommentCount = post.node.edge_Media_To_Comment.count; newPost.CreateDateMi = Parser.ToDateTime(double.Parse(post.node.taken_at_timestamp)); newPost.Description = post.node.edge_Media_To_Caption.edges.Count == 0 ? string.Empty : post.node.edge_Media_To_Caption.edges[0].node.text; return(newPost); }