Пример #1
0
        protected override async Task RollbackTransactionInternalAsync(TransactionBase transaction)
        {
            Console.WriteLine("Rollback started");

            var moveTransaction = MoveTaskTransaction.CreateFromBase(transaction);

            if (moveTransaction.MovedMembers.IsNullOrEmpty())
            {
                Console.WriteLine("Nothing to rollback");
                return;
            }

            string projectId = moveTransaction.ProjectId;

            var projectMembersById = (await _projectMembersRepository.GetProjectsMembersAsync(projectId: projectId)).ToDictionary(m => m.UserId);

            foreach (var movedMember in moveTransaction.MovedMembers)
            {
                var member = projectMembersById[movedMember];

                var outboxMessage = OutboxMessageModel.Create(
                    new ProjectMemberDeletedMessage
                {
                    Username     = member.Username,
                    UserId       = member.UserId,
                    ProjectId    = projectId,
                    ProjectTitle = member.ProjectTitle
                }, Topics.ProjectMembers, MessageActions.Deleted);

                await _projectMembersRepository.DeleteMemberFromProjectAsync(projectId, movedMember, outboxMessage);
            }

            Console.WriteLine("Rollback completed");
        }
        public async Task RemoveMemberFromProjectAsync(string projectId, string userId)
        {
            (ProjectModel project, UserModel user) = await GetProjectAndUserAsync(projectId, userId);

            var outboxMessage = OutboxMessageModel.Create(
                new ProjectMemberDeletedMessage
            {
                ProjectId    = projectId,
                ProjectTitle = project?.Title,
                UserId       = userId,
                Username     = user?.Username
            }, Topics.ProjectMembers, MessageActions.Deleted
                );

            await _projectMembersRepository.DeleteMemberFromProjectAsync(projectId, userId, outboxMessage);
        }