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