Beispiel #1
0
        public static void Delegate(Guid voterUserId, Guid expertId, Guid tagId)
        {
            var tag = GetTopic(tagId);

            if (tag == null)
            {
                throw new BusinessLogicException("Данный тег не является топиком");
            }

            var expert = DataService.PerThread.ExpertSet.SingleOrDefault(x => x.Id == expertId);

            if (expert == null)
            {
                throw new BusinessLogicException("Не найден человек эксперт!");
            }

            var groupId = expert.GroupMember.GroupId;

            var voter = DataService.PerThread.GroupMemberSet.SingleOrDefault(x => x.UserId == voterUserId && x.GroupId == groupId);

            if (voter == null)
            {
                throw new BusinessLogicException("Не найден человек, делегирующий голос!");
            }

            if (voter.GroupId != groupId)
            {
                throw new BusinessLogicException("Данный тег не принадлежит этой группе");
            }
            if (voter.Expert != null && voter.Expert.Tags.Contains(tag))
            {
                throw new BusinessLogicException("По этому тэгу вы сами являетесь экспертом");
            }

            var expertVote = DataService.PerThread.ExpertVoteSet.SingleOrDefault(x => x.GroupMemberId == voter.Id && x.TagId == tagId);

            if (expertVote != null)
            {
                expertVote.Expert = expert;
                DataService.PerThread.SaveChanges();
            }
            else
            {
                expertVote = new ExpertVote
                {
                    Date          = DateTime.Now,
                    ExpertId      = expertId,
                    GroupMemberId = voter.Id,
                    TagId         = tagId
                };

                DataService.PerThread.ExpertVoteSet.AddObject(expertVote);
                DataService.PerThread.SaveChanges();
            }
        }
        public static void Delegate(Guid voterUserId, Guid expertId, Guid tagId)
        {
            var tag = GetTopic(tagId);
            if (tag == null)
                throw new BusinessLogicException("Данный тег не является топиком");

            var expert = DataService.PerThread.ExpertSet.SingleOrDefault(x => x.Id == expertId);
            if (expert == null)
                throw new BusinessLogicException("Не найден человек эксперт!");

            var groupId = expert.GroupMember.GroupId;

            var voter = DataService.PerThread.GroupMemberSet.SingleOrDefault(x => x.UserId == voterUserId && x.GroupId == groupId);
            if (voter == null)
                throw new BusinessLogicException("Не найден человек, делегирующий голос!");

            if (voter.GroupId != groupId)
                throw new BusinessLogicException("Данный тег не принадлежит этой группе");
            if (voter.Expert != null && voter.Expert.Tags.Contains(tag))
                    throw new BusinessLogicException("По этому тэгу вы сами являетесь экспертом");

            var expertVote = DataService.PerThread.ExpertVoteSet.SingleOrDefault(x => x.GroupMemberId == voter.Id && x.TagId == tagId);
            if (expertVote != null)
            {
                expertVote.Expert = expert;
                DataService.PerThread.SaveChanges();
            }
            else
            {
                expertVote = new ExpertVote
                    {
                        Date = DateTime.Now,
                        ExpertId = expertId,
                        GroupMemberId = voter.Id,
                        TagId = tagId
                    };

                DataService.PerThread.ExpertVoteSet.AddObject(expertVote);
                DataService.PerThread.SaveChanges();
            }
        }