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(); } }