Beispiel #1
0
 public MyHttpRequestBody()
 {
     requestID     = "xxx";
     scenarioID    = "xxx";
     channel       = "xxx";
     version       = "1.0";
     operatorID    = "PC";
     pricing       = true;
     matchingModel = new MatchingModel();
 }
Beispiel #2
0
        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));
        }