/// <inheritdoc /> public async Task <PromotionActionSummary> TryUpdateAsync(long commentId, ulong userId, Action <PromotionCommentMutationData> updateAction) { if (updateAction is null) { throw new ArgumentNullException(nameof(updateAction)); } var oldComment = await ModixContext.Set <PromotionCommentEntity>() .Include(x => x.Campaign) .SingleAsync(x => x.Id == commentId); var modifyAction = new PromotionActionEntity { CampaignId = oldComment.CampaignId, Created = DateTimeOffset.Now, CreatedById = userId, GuildId = oldComment.Campaign.GuildId, Type = PromotionActionType.CommentModified, }; await ModixContext.Set <PromotionActionEntity>().AddAsync(modifyAction); await ModixContext.SaveChangesAsync(); var data = PromotionCommentMutationData.FromEntity(oldComment); updateAction(data); var newComment = data.ToEntity(); newComment.CreateActionId = modifyAction.Id; await ModixContext.Set <PromotionCommentEntity>().AddAsync(newComment); await ModixContext.SaveChangesAsync(); modifyAction.OldCommentId = oldComment.Id; modifyAction.NewCommentId = newComment.Id; oldComment.ModifyActionId = modifyAction.Id; newComment.CreateActionId = modifyAction.Id; await ModixContext.SaveChangesAsync(); var actionSummary = await ModixContext.Set <PromotionActionEntity>().AsNoTracking() .Where(x => x.Id == modifyAction.Id) .AsExpandable() .Select(PromotionActionSummary.FromEntityProjection) .FirstAsync(); return(actionSummary); }
/// <inheritdoc /> public async Task <long> TryUpdateAsync(long commentId, ulong userId, Action <PromotionCommentMutationData> updateAction) { if (updateAction is null) { throw new ArgumentNullException(nameof(updateAction)); } var oldComment = await ModixContext.PromotionComments .Include(x => x.Campaign) .SingleAsync(x => x.Id == commentId); var modifyAction = new PromotionActionEntity { CampaignId = oldComment.CampaignId, Created = DateTimeOffset.Now, CreatedById = userId, GuildId = oldComment.Campaign.GuildId, Type = PromotionActionType.CommentModified, }; await ModixContext.PromotionActions.AddAsync(modifyAction); await ModixContext.SaveChangesAsync(); var data = PromotionCommentMutationData.FromEntity(oldComment); updateAction(data); var newComment = data.ToEntity(); newComment.CreateActionId = modifyAction.Id; await ModixContext.PromotionComments.AddAsync(newComment); await ModixContext.SaveChangesAsync(); modifyAction.OldCommentId = oldComment.Id; modifyAction.NewCommentId = newComment.Id; oldComment.ModifyActionId = modifyAction.Id; newComment.CreateActionId = modifyAction.Id; await ModixContext.SaveChangesAsync(); await RaisePromotionActionCreatedAsync(modifyAction); return(newComment.Id); }