IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Données de database manquantes à la lecture


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 215
    Par défaut Données de database manquantes à la lecture
    Bonjour,

    Je travaille sur une messagerie type plateforme de ventes.
    Un acheteur peut contacter un vendeur au sujet d'un produit.
    Son message concerne un produit en particulier.
    L'échange de messages n'est possible qu'entre un acheteur et le propriétaire du produit, et concernera uniquement le produit en question.

    Les échanges sont enregistrés en DB.

    Model :
    User_Exp, User_Dest et Article sont des Foreign Key
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        public class MessagesModel
        {
            public long Id { get; set; }
            public ApplicationUser User_Exp { get; set; }
            public ApplicationUser User_Dest { get; set; }
            public Articles Article { get; set; }
     
            public string Message { get; set; }
            public messageStatus Status { get; set; }
            public DateTime Created_at { get; set; }
            public enum messageStatus
            {
                Sent,
                Delivered
            }
            public MessagesModel()
            {
                Status = messageStatus.Sent;
            }
        }
    Au chargement de la vue "Messages", je récupère l'historique des échanges :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            function getChat() {
                $.ajax({
                    url: '@Url.Action("ConversationWithContact", "Messagerie")',
                    type: 'GET',
                    cache: false,
                    data: {articleId:  '@Html.DisplayTextFor(model => model.Id)'},
                })
                    .done( function(resp) {
                    var chat_data = resp.data || [];
                    loadChat( chat_data );
                    });
            };
    Le controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
            public JsonResult ConversationWithContact(long articleId)
            {
                ApplicationUser currentUser = _repo.GetUser();
                Articles item = _repo.GetArticleByID(articleId);
     
                var conversations = new List<Models.Messages.MessagesModel>();
     
                conversations = _context.Messages.
                                      Where(c => (c.Article.Id == item.Id)
                                      && (c.User_Dest.Id == currentUser.Id ||
                                      c.User_Exp.Id == currentUser.Id))
                                      .OrderBy(c => c.Created_at)
                                      .ToList();
     
                return Json(new { status = "success", data = conversations });
            }
    C'est là que le problème arrive.
    Pour l'exemple j'ai 2 users, Titi et Toto, et un vendeur.
    Titi et Toto ont envoyé chacun un message au vendeur concernant le même produit.

    "conversations" renvoie une valeur NULL pour User_Exp alors que la valeur est présente dans la DB.
    Le problème se produit dans le controller.

    Nom : SharedScreenshot_BdD.jpg
Affichages : 19
Taille : 48,3 Ko

    Cela se produit pour chaque message pour lequel le user qui utilise la messagerie n'est pas l'expéditeur.


    Quand c'est le DESTINATAIRE (en l’occurrence le propriétaire du produit) qui utilise la messagerie, chaque User_Exp est NULL.
    Nom : Conversation_via LEC.jpg
Affichages : 17
Taille : 89,0 Ko

    Pour Titi, c'est les messages de Toto qui ont user_Exp = NULL.
    Nom : Conversation_via TITI.jpg
Affichages : 17
Taille : 80,9 Ko

    Et pour Toto, ce sont ceux de Titi :
    Nom : Conversation_via TOTO.jpg
Affichages : 17
Taille : 85,3 Ko

    J'ai absolument besoin de l'info user_Exp pour ensuite trier les messages.

    Je n'arrive pas à comprendre ce problème.
    C'est peut-être juste un problème de logique, mais je ne le comprends pas.
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 215
    Par défaut
    Je précise qu'en modifiant et simplifiant la requête cela ne change rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                conversations = _context.Messages.
                                      Where(c => c.Article.Id == item.Id)
                                      .OrderBy(c => c.Created_at)
                                      .ToList();
    Renvoie le même problème.

  3. #3
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 215
    Par défaut
    Une piste à laquelle je pense :
    Un user ne doit pas être autorisé à obtenir des infos (son nom via son id) d'un autre user.
    Cela peut expliquer pourquoi seul l'info "user_Exp" du user consultant la DB est affiché.

    Si c'est ça, c'est embêtant.
    Comment deux users peuvent alors réussir à communiquer ?

    Edit 1[ Néanmoins, Titi et Toto obtiennent tous deux l'info "user_Dest" du vendeur ]

    Edit 2
    Voici le code d'enregistrement des données du controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
            [HttpPost]
            public JsonResult SendMessage(long? ItemId, string msg)
            {
                var item = _repo.GetArticleByID(ItemId);
                var currentUser = _repo.GetUser();
                var Other_User = _repo.GetUser_By_ID(item.ApplicationUserId).Result;
     
                MessagesModel convo = new MessagesModel
                {
                    User_Exp = currentUser,
                    Message = msg,
                    User_Dest = Other_User,
                    Article = item,
                    Created_at = DateTime.Now,
                };
                _context.Messages.Add(convo);
                _context.SaveChanges();
     
                return Json(convo);
            }
    et les méthodes du Repository appelées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
            public Articles GetArticleByID(long? articleId)
            {
                return _context.Articles.
                    Include(a => a.User)
                    .FirstOrDefault(x => x.Id == articleId);
            }
     
            public ApplicationUser GetUser()
            {
                var userId = _httpContextAccessor.HttpContext.User.GetLoggedInUserId<string>(); // Specify the type of your UserId;
                ApplicationUser appUser = _context.Users.FirstOrDefault(x => x.Id == userId);
     
                return appUser;
            }
     
            public async Task<ApplicationUser> GetUser_By_ID(string? Id)
            {
                ApplicationUser user = await _userManager.FindByIdAsync(Id);
                return user;
            }

Discussions similaires

  1. Erreur sur lecture d'une feuille manquante dans excel
    Par yoyo_le_landais dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 05/10/2012, 12h29
  2. Lecture de valeurs manquantes sous MVS
    Par nunien22 dans le forum Administration et Installation
    Réponses: 3
    Dernier message: 17/09/2008, 17h18
  3. [FPDF] Polices manquantes à la lecture du PDF
    Par tarik1099 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 13/11/2007, 18h38
  4. Réponses: 8
    Dernier message: 25/09/2007, 09h31
  5. lecture de donnes a partir d'un PDF
    Par medhioub.h dans le forum Documents
    Réponses: 2
    Dernier message: 27/07/2007, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo