public MatchChat GetConversationMatch(Conversation conversation, List <string> requiredTypes, List <string> requiredProperyMatches, List <string> excludedTypes, List <string> subjectGoals) { var conversationLists = ConversationDatabase.ConversationDatabase.conversationDatabase.Where(cl => !excludedTypes.Any(t => cl.Value.type == t)).Select(x => x.Value).ToList(); if (requiredTypes.Count > 0) { conversationLists = conversationLists.Where(cl => requiredTypes.Any(t => cl.type == t)).ToList(); } if (requiredProperyMatches.Count > 0) { var userData = UserDatabase.UserDatabase.userDatabase.Where(user => user.userName == conversation.responses.Last().chat.user&& requiredProperyMatches.All(requiredProperty => user.derivedProperties.Any(dp => dp.name == requiredProperty))).FirstOrDefault(); var botData = UserDatabase.UserDatabase.userDatabase.Where(user => user.userName == conversation.responses.Last().chat.botName&& requiredProperyMatches.All(requiredProperty => user.derivedProperties.Any(dp => dp.name == requiredProperty))).FirstOrDefault(); if (userData != null && botData != null) { var propertiesToMatch = userData.derivedProperties.Where(dp => requiredProperyMatches.Contains(dp.name)); var matchingUsers = UserDatabase.UserDatabase.userDatabase.Where(user => propertiesToMatch.All(ptm => user.derivedProperties.Any(dp => dp.name == ptm.name && dp.value == ptm.value))).ToList(); var botPropertiesToMatch = botData.derivedProperties.Where(dp => requiredProperyMatches.Contains(dp.name)); var usersMatchingBot = UserDatabase.UserDatabase.userDatabase.Where(user => botPropertiesToMatch.All(ptm => user.derivedProperties.Any(dp => dp.name == ptm.name && dp.value == ptm.value))).ToList(); var matchRequest = new ConversationMatchRequest { conversation = conversation, conversationLists = conversationLists }; return(_bestMatchService.GetBestMatch(matchRequest.conversation, matchRequest.conversationLists, subjectGoals, matchingUsers, usersMatchingBot)); } } var conversationMatchRequest = new ConversationMatchRequest { conversation = conversation, conversationLists = conversationLists }; return(_bestMatchService.GetBestMatch(conversationMatchRequest.conversation, conversationMatchRequest.conversationLists, subjectGoals)); }
public MatchChat GetConversationMatch(Conversation conversation, List <string> excludedTypes, List <string> subjectGoals) { var conversationLists = ConversationDatabase.ConversationDatabase.conversationDatabase.Where(cl => !excludedTypes.Any(t => cl.Value.type == t)).Select(x => x.Value).ToList(); var conversationMatchRequest = new ConversationMatchRequest { conversation = conversation, conversationLists = conversationLists }; return(_bestMatchService.GetBestMatch(conversationMatchRequest.conversation, conversationMatchRequest.conversationLists, subjectGoals)); }