/// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }