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); }
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 }); }