public MyHttpRequestBody() { requestID = "xxx"; scenarioID = "xxx"; channel = "xxx"; version = "1.0"; operatorID = "PC"; pricing = true; matchingModel = new MatchingModel(); }
public async Task <IActionResult> OnPostSearchAsync() { List <AspNetUser> users = GetUsers(); AspNetUser user = null; string id = ""; string accessToken = await HttpContext.GetTokenAsync("access_token"); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); string checkPref = await client.GetStringAsync(Configuration["URLAPI"] + "api/Matching/checkPreferences"); string result = JsonConvert.DeserializeObject <string>(checkPref); if (result.Equals("error")) { return(BadRequest()); } // Récurération des données et convertion des données dans le bon type string content = await client.GetStringAsync(Configuration["URLAPI"] + "api/Account/getUserInfo"); user = JsonConvert.DeserializeObject <AspNetUser>(content); // Déterminer s'il y a des matchs List <MatchingModel> usersChoices = new List <MatchingModel>(); // Premier tri obligatoire : // Sortir de la liste les utilisateurs déjà "aimé", // dont l'age ne correspond par à la préférence // dont le sexe ne correspond pas à la préférence // dont l'orientation sexuelle n'est pas la même List <AspNetUser> potentialUserMatchs = GetPotentialUsers(user, users); // Ajouter et calculer le potentiel du match : 100% = couple parfait foreach (AspNetUser potentialUserMatch in potentialUserMatchs) { int nbPreferenceCommun = 0; // Le potentiel commence à 0.2 car age et profil obligatoire (chacun vaut 0.125 double potentielPourcentage = MATCHING * 200; // Vérifier si le profil correspond List <string> potentialUserMatchProfil = new List <string>(); foreach (UserProfil userProfil in potentialUserMatch.UserProfils) { potentialUserMatchProfil.Add(userProfil.Profil.ProfilName); } string profil = ""; List <string> potentialUserProfil = new List <string>(); foreach (UserProfil userProfil in user.UserProfils) { potentialUserProfil.Add(userProfil.Profil.ProfilName); } foreach (string userMatchProfil in potentialUserMatchProfil) { if (potentialUserProfil.Contains(userMatchProfil)) { profil = userMatchProfil; potentielPourcentage += MATCHING; break; } } // Vérifier si la corpulence correspond string corpulence = ""; string corpulenceUserMatch = potentialUserMatch.Corpulence.CorpulenceName; foreach (Preference preferenceUser in user.Preferences) { foreach (PreferenceCorpulence preferenceCorpulenceUser in preferenceUser.PreferenceCorpulences) { if (preferenceCorpulenceUser.Corpulence.CorpulenceName == corpulenceUserMatch) { corpulence = corpulenceUserMatch; potentielPourcentage += MATCHING; break; } } } // Vérifier si la couleur de cheveux correspond string hairColor = ""; string hairColorUserMatch = potentialUserMatch.HairColor.HairColorName; foreach (Preference preferenceUser in user.Preferences) { foreach (PreferenceHairColor preferenceHairColorUser in preferenceUser.PreferenceHairColors) { if (preferenceHairColorUser.HairColor.HairColorName == hairColorUserMatch) { hairColor = hairColorUserMatch; potentielPourcentage += MATCHING; break; } } } // Vérifier si la taille de cheveux correspond string hairSize = ""; string hairSizeUserMatch = potentialUserMatch.HairSize.HairSizeName; foreach (Preference preferenceUser in user.Preferences) { foreach (PreferenceHairSize preferenceHairSizeUser in preferenceUser.PreferenceHairSizes) { if (preferenceHairSizeUser.HairSize.HairSizeName == hairSizeUserMatch) { hairSize = hairSizeUserMatch; potentielPourcentage += MATCHING; break; } } } // Vérifier si le style correspond List <string> potentialUserMatchStyle = new List <string>(); foreach (UserStyle userStyle in potentialUserMatch.UserStyles) { potentialUserMatchStyle.Add(userStyle.Style.StyleName); } List <string> potentialUserStyle = new List <string>(); foreach (UserStyle userStyle in user.UserStyles) { potentialUserStyle.Add(userStyle.Style.StyleName); } string style = ""; foreach (string userMatchStyle in potentialUserMatchStyle) { if (potentialUserStyle.Contains(userMatchStyle)) { style = userMatchStyle; potentielPourcentage += MATCHING; break; } } // Vérifier si la religion correspond string religion = ""; string religionUserMatch = potentialUserMatch.Religion.ReligionName; foreach (Preference preferenceUser in user.Preferences) { foreach (PreferenceReligion preferenceReligionUser in preferenceUser.PreferenceReligions) { if (preferenceReligionUser.Religion.ReligionName == religionUserMatch) { religion = religionUserMatch; potentielPourcentage += MATCHING; break; } } } //Vérifier si la musique correspond string musicName = ""; if (potentialUserMatch.UserMusics.Count() > 0) { string musicMatch = potentialUserMatch.UserMusics.FirstOrDefault().Music.MusicName; foreach (Preference preferenceUser in user.Preferences) { foreach (PreferenceMusic preferenceMusic in preferenceUser.PreferenceMusics) { if (preferenceMusic.Music.MusicName == musicMatch) { musicName = musicMatch; potentielPourcentage += MATCHING; break; } } } } //Vérifier si l'artiste correspond string artistName = ""; if (potentialUserMatch.UserMusics.Count() > 0) { string artistMatch = potentialUserMatch.UserMusics.FirstOrDefault().Music.ArtistName; foreach (Preference preferenceUser in user.Preferences) { foreach (PreferenceMusic preferenceMusic in preferenceUser.PreferenceMusics) { if (preferenceMusic.Music.ArtistName == artistMatch) { artistName = artistMatch; potentielPourcentage += MATCHING; break; } } } } // Ajout du match usersChoices.Add( new MatchingModel { Id = potentialUserMatch.Id, UserName = potentialUserMatch.UserName, Firstname = potentialUserMatch.Firstname, Age = DateTime.Now.Year - potentialUserMatch.Birthday.Year, Sexe = potentialUserMatch.Sexe.SexeName, Profil = profil, Corpulence = corpulence, HairColor = hairColor, HairSize = hairSize, Style = style, Religion = religion, Sexuality = user.Sexuality.SexualityName, MusicName = musicName, ArtisteName = artistName, PourcentageMatching = potentielPourcentage } ); } // Vérifier si le user possède au moins un abonnement bool hasSubscription = false; if (user.UserSubscriptions.Count() > 0) { DateTime lastSubscriptionDate = user.UserSubscriptions.Last().UserSubscriptionsDate; // Vérifier quel type d'abonnement le user a if (user.UserSubscriptions.Last().Subscriptions.SubscriptionName == "1 Mois") { lastSubscriptionDate = lastSubscriptionDate.AddMonths(1); } else if (user.UserSubscriptions.Last().Subscriptions.SubscriptionName == "1 Année") { lastSubscriptionDate = lastSubscriptionDate.AddYears(1); } // Vérifier si son abonnement est toujours valable if (lastSubscriptionDate < DateTime.Now) { hasSubscription = false; } else { hasSubscription = true; } } // Ne garder que les profils qui correspondent à 75% et plus usersChoices = usersChoices.Where(u => u.PourcentageMatching >= 0.75).ToList(); if (usersChoices.Count() > 0) { if (!hasSubscription) { MatchingModel one = usersChoices[0]; usersChoices = new List <MatchingModel>(); usersChoices.Add(one); } } return(new JsonResult(usersChoices)); }