Ejemplo n.º 1
0
        public CardModel <Group> Save([FromBody] CardModel <Group> card)
        {
            if (card?.Member == null)
            {
                throw new ArgumentNullException(nameof(card));
            }

            using (var transaction = _repository.BeginTransaction())
            {
                if (card.Member.Id > 0)
                {
                    _repository.Update(card.Member);
                }
                else
                {
                    card.Member.OrganizationId = _sessionContext.OrganizationId;
                    card.Member.CreateDate     = DateTime.Now;
                    _repository.Insert(card.Member);
                }

                var dbRoles  = _memberRepository.Roles(card.Member.Id, false);
                var rolesAdd = card.Roles.Diff(dbRoles);
                var rolesDel = dbRoles.Diff(card.Roles);

                var dbGroups  = _memberRepository.Groups(card.Member.Id, MemberRelationType.Direct);
                var groupsAdd = card.Groups.Diff(dbGroups);
                var groupsDel = dbGroups.Diff(card.Groups);

                _memberRepository.InsertRoles(card.Member.Id, rolesAdd);
                _memberRepository.DeleteRoles(card.Member.Id, rolesDel);
                _memberRepository.InsertGroups(card.Member.Id, groupsAdd);
                _memberRepository.DeleteGroups(card.Member.Id, groupsDel);

                transaction.Commit();
            }

            return(card);
        }