public int GenerateMatchScoreByStatus(User userA, User userB) { var statusA = userA.Status; var statusB = userB.Status; if (userA.Preferences == null) { userA.Preferences = new Preferences(); } if (userB.Preferences == null) { userB.Preferences = new Preferences(); } var score = 0; if((statusA == Status.HasVacancy) && (statusB == Status.NeedsHousingAndRoommate)) { score = GenerateMatchScoreOfFillingVacancy(userA, userB); } else if ( (statusA == Status.NeedsHousingAndRoommate) && (statusB == Status.HasVacancy) ) { score = GenerateMatchScoreOfMovingIn(userA, userB); } else if ( (statusA == Status.NeedsRoommateOnly) && (statusB == Status.NeedsRoommateOnly) ) { score = GenerateMatchScoreOfPreferences(userA, userB); } if(score < 0) { return 0; } else { return score/100; } return 0; }
// User A wants to live with user B public int GenerateMatchScoreOfPreferences(User userA, User userB) { if ((userA == null) || (userB == null) || (userA.Status == Status.Inactive) || (userB.Status == Status.Inactive)) { return 0; } if (userA.Preferences == null) { userA.Preferences = new Preferences(); } if (userB.Preferences == null) { userB.Preferences = new Preferences(); } var score = 0; score += GenerateMatchScoreForAge(userA.Preferences.Age, userB.Age); score += GenerateMatchScoreForGender(userA.Preferences.Gender, userB.Gender); score += GenerateMatchScoreForPriceRange(userA.Preferences.LowerPriceLimit, userA.Preferences.UpperPriceLimit, userB.Preferences.LowerPriceLimit, userB.Preferences.UpperPriceLimit); var matchingHousing = GetMatchingHousings(userA.Preferences.Housings, new List<Housing> { userB.Housing }); if (matchingHousing.Count > 0) { score += 1000; } if((userA.Preferences != null) && (userB.Preferences != null)) { var matchingTags = GetMatchingTags(userA.Preferences.Tags, userB.Preferences.Tags); score += 100 * matchingTags.Count; var matchingLocationScore = GenerateHousingLocationScore(userB.Housing, userA.Preferences.Locations); score += matchingLocationScore; } return score; }
// User A is trying to fill a vacancy with user B public int GenerateMatchScoreOfFillingVacancy(User userA, User userB) { if ((userA == null) || (userB == null) || (userA.Status == Status.Inactive) || (userB.Status == Status.Inactive)) { return 0; } if(userA.Preferences == null) { userA.Preferences = new Preferences(); } if(userB.Preferences == null) { userB.Preferences = new Preferences(); } var score = 0; if((userA.Tags != null) && (userB.Preferences.Tags != null)) { var matchingTags = GetMatchingTags(userA.Tags, userB.Preferences.Tags); score += 100 * matchingTags.Count; } score += GenerateMatchScoreForAge(userA.Preferences.Age, userB.Age); score += GenerateMatchScoreForGender(userA.Preferences.Gender, userB.Gender); return score; }