public Task ExecuteAsync( PostId newPostId, ChannelId channelId, ValidComment content, DateTime?sheduledPostDate, QueueId queueId, ValidPreviewText previewText, FileId previewImageId, IReadOnlyList <FileId> fileIds, int previewWordCount, int wordCount, int imageCount, int fileCount, int videoCount, DateTime now) { newPostId.AssertNotNull("newPostId"); content.AssertNotNull("content"); channelId.AssertNotNull("channelId"); var post = new Post( newPostId.Value, channelId.Value, null, queueId == null ? (Guid?)null : queueId.Value, null, previewImageId == null ? (Guid?)null : previewImageId.Value, null, previewText == null ? null : previewText.Value, content.Value, previewWordCount, wordCount, imageCount, fileCount, videoCount, default(DateTime), // Live date assigned by sub-statements. now); var postFiles = fileIds.EmptyIfNull().Select(v => new PostFile(newPostId.Value, v.Value)).ToList(); if (queueId != null) { return(this.subStatements.QueuePostAsync(post, postFiles)); } return(this.subStatements.SchedulePostAsync(post, postFiles, sheduledPostDate, now)); }
public async Task ExecuteAsync( PostId postId, ValidComment content, ValidPreviewText previewText, FileId previewImageId, IReadOnlyList <FileId> fileIds, int previewWordCount, int wordCount, int imageCount, int fileCount, int videoCount) { postId.AssertNotNull("postId"); fileIds.AssertNotNull("fileIds"); var post = new Post(postId.Value) { // QueueId = command.QueueId.Value, - Removed as this would require a queue defragmentation if post is already queued. Unnecessary complexity for MVP. PreviewText = previewText == null ? null : previewText.Value, PreviewImageId = previewImageId == null ? (Guid?)null : previewImageId.Value, Content = content == null ? null : content.Value, PreviewWordCount = previewWordCount, WordCount = wordCount, ImageCount = imageCount, FileCount = fileCount, VideoCount = videoCount }; var postFiles = fileIds.Select(v => new PostFile(postId.Value, v.Value)).ToList(); using (var transaction = TransactionScopeBuilder.CreateAsync()) { using (var connection = this.connectionFactory.CreateConnection()) { // The order we access tables should match PostToChannelDbStatement. var rowsUpdated = await connection.UpdateAsync( post, Post.Fields.PreviewText | Post.Fields.PreviewImageId | Post.Fields.Content | Post.Fields.PreviewWordCount | Post.Fields.WordCount | Post.Fields.ImageCount | Post.Fields.FileCount | Post.Fields.VideoCount); if (rowsUpdated > 0) { await connection.ExecuteAsync( DeleteQuery, new { PostId = postId.Value }); if (fileIds.Count > 0) { await connection.InsertAsync(postFiles); } } } transaction.Complete(); } }