Beispiel #1
0
        public async void CreateMessageWithConversationNotCreated()
        {
            // Arrange
            var message = new MessageViewModel
            {
                Conversation = 0,
                Content      = "content",
                ReceiverId   = "id"
            };
            var expectedErrorMessage = "ConversationNotCreated";

            _identityService.GetUserByUsername(Arg.Any <string>()).ReturnsForAnyArgs(new User {
                Id = "id", UserName = "******"
            });
            _identityService.GetUserById(Arg.Any <string>()).ReturnsForAnyArgs(new User {
                Id = "idd", UserName = "******"
            });
            _convRepository.CreateConversation(Arg.Any <Conversation>()).ReturnsForAnyArgs(0);
            MessageService service = new MessageService(_repository, _convRepository, _identityService, _notifService);

            // Act
            var result = await service.CreateMessage(message, "username");

            // Assert
            Assert.False(result.Succeeded);
            Assert.Equal(expectedErrorMessage, result.Messages[0]);
        }
        public async Task Execute(PresentationDto dto)
        {
            var conversationId = await conversations.CreateConversation(dto.Name, dto.CreatedBy);

            dto.ConversationId = conversationId;

            await presentationRepository.Create(dto);
        }
Beispiel #3
0
        public ConversationMessageCreateQueryModel Create([FromBody] ConversationMessageCommandModel message)
        {
            if (message.Conversation == null)
            {
                throw new Exception("Unable to create message without a conversation command model. ");
            }

            string userId = _userManager.GetUserId(User);

            if (userId == null)
            {
                throw new Exception("Unauthorized");
            }

            Guid conversationId = message.Conversation.Id;

            if (conversationId == Guid.Empty)
            {
                conversationId = _conversationRepository.ParticipantIds(userId, message.Conversation.ParticipantIds).Id;
            }

            if (conversationId == Guid.Empty)
            {
                conversationId = _conversationRepository.CreateConversation(message.Conversation.ParticipantIds, message.Conversation.Title);

                if (conversationId == null)
                {
                    throw new Exception("Something went wrong while creating a new conversation. ");
                }
            }

            ConversationMessageCreateQueryModel conversationMessageCreate = _conversationMessageRepository.CreateMessage(conversationId, userId, message.Content);

            conversationMessageCreate.Sender.Username = _userManager.GetUserName(User);

            if (conversationMessageCreate.Id == null)
            {
                throw new Exception("Something went wrong while creating a new conversation message. ");
            }

            _conversationInstanceRepository.CreateConversationInstance(conversationId, conversationMessageCreate.Id, userId);
            _conversationInstanceRepository.CreateConversationInstances(conversationId, conversationMessageCreate.Id, message.Conversation.ParticipantIds);

            return(conversationMessageCreate);
        }
        /// <summary>
        /// Permet de créer un message en base de données
        /// </summary>
        /// <param name="msg"></param>
        /// <returns>MyResponse</returns>
        public async Task <MyResponse> CreateMessage(MessageViewModel msg, string username)
        {
            if (msg != null && !String.IsNullOrWhiteSpace(username) && !String.IsNullOrWhiteSpace(msg.Content) && !String.IsNullOrWhiteSpace(msg.ReceiverId))
            {
                // On récupère l'utilisateur courant via son nom d'utilisateur dans le token
                var user = await _identityService.GetUserByUsername(username);

                // On pense également à récupérer l'utilisateur à qui l'on veut envoyer le message pour être sûr qu'il existe
                var receiver = await _identityService.GetUserById(msg.ReceiverId);

                if (user != null && receiver != null)
                {
                    // On vérifie si une conversation n'existe pas déjà avec les deux utilisateurs pour éviter de créer des doublons
                    var conv = _convRepository.GetConversationByUsers(user.Id, receiver.Id);
                    if (conv != null && msg.Conversation == 0)
                    {
                        msg.Conversation = conv.Id;
                    }

                    // Si la conversation est égale à 0 c'est qu'on doit en créer une nouvelle
                    if (msg.Conversation == 0)
                    {
                        Conversation newConv = new Conversation
                        {
                            FirstUser       = user.Id,
                            SecondUser      = receiver.Id,
                            LastMessageDate = DateTime.Now
                        };

                        var createdConvId = await _convRepository.CreateConversation(newConv);

                        // On vérifie si la conversation a bien été créée
                        if (createdConvId != 0)
                        {
                            Message newMsg = new Message
                            {
                                Conversation = createdConvId,
                                Content      = msg.Content,
                                Date         = DateTime.Now,
                                Sender       = user.Id
                            };

                            if (await _repository.CreateMessage(newMsg))
                            {
                                // Si le message a bien été créé, on envoie une notification au destinataire
                                Notification notif = new Notification
                                {
                                    Context   = Notification.Type.Message,
                                    ContextId = createdConvId,
                                    Content   = $"<strong>{user.UserName}</strong> vous a envoyé un message !",
                                    UserId    = receiver.Id,
                                    Date      = DateTime.Now
                                };

                                await _notifService.CreateNotification(notif);

                                // On ajoute l'id de la conversation dans la réponse pour pouvoir y rediriger l'utilisateur
                                var response = new MyResponse {
                                    Succeeded = true
                                };
                                response.Result = createdConvId;

                                return(response);
                            }

                            var creationError = new MyResponse {
                                Succeeded = false
                            };
                            creationError.Messages.Add("MessageNotCreated");

                            return(creationError);
                        }

                        var error = new MyResponse {
                            Succeeded = false
                        };
                        error.Messages.Add("ConversationNotCreated");

                        return(error);
                    }
                    // Sinon, c'est que la conversation existe déjà
                    else
                    {
                        // On vérifie que la conversation existe bien et que l'envoyeur et le receveur du message y sont bien renseignés
                        var existingConv = _convRepository.GetConversationByIdAndUsers(msg.Conversation, user.Id, msg.ReceiverId);

                        // Si la conv existe, on continue
                        if (existingConv != null)
                        {
                            Message newMsg = new Message
                            {
                                Conversation = msg.Conversation,
                                Content      = msg.Content,
                                Date         = DateTime.Now,
                                Sender       = user.Id
                            };

                            if (await _repository.CreateMessage(newMsg))
                            {
                                // On met à jour la date du dernier message de la conversation pour la faire remonter en haut
                                await _convRepository.UpdateConversationDate(msg.Conversation);

                                // Si le message a bien été créé, on envoie une notification au destinataire
                                Notification notif = new Notification
                                {
                                    Context   = Notification.Type.Message,
                                    ContextId = existingConv.Id,
                                    Content   = $"<strong>{user.UserName}</strong> vous a envoyé un message !",
                                    UserId    = receiver.Id,
                                    Date      = DateTime.Now
                                };

                                await _notifService.CreateNotification(notif);

                                var response = new MyResponse {
                                    Succeeded = true
                                };
                                response.Result = existingConv.Id;

                                return(response);
                            }

                            var creationError = new MyResponse {
                                Succeeded = false
                            };
                            creationError.Messages.Add("MessageNotCreated");

                            return(creationError);
                        }

                        var error = new MyResponse {
                            Succeeded = false
                        };
                        error.Messages.Add("ConversationNotFound");

                        return(error);
                    }
                }
            }

            return(new MyResponse {
                Succeeded = false
            });
        }