//It's not really a edit, just create a new version, with new time and new text public async Task <bool> Edit(EditMessageDTO editMessageDTO, int jwtOwner, MyDbContext _context) { var valid = Helper.ValidMessageText(editMessageDTO.NewMessageText); if (!valid) { throw new Exception("Message is invalid"); } var message = await _context.Messages.FirstOrDefaultAsync(c => c.MessageId == editMessageDTO.MessageId); if (message == null) { throw new Exception("Message does not exist, please contact the chat administrator"); } if (message.UserId != jwtOwner) { throw new Exception("You don't own this message, you cannot modify it."); } message.AddMessageVersion(new MessageVersion(message.MessageId, editMessageDTO.NewMessageText)); await _context.SaveChangesAsync(); return(true); }
public async Task EditMessage(int messageId, string messageText, JwtToken jwt, bool valid) { var client = _factory.CreateClient(); var newMessage = new EditMessageDTO(messageId, messageText); var addMessageJson = new StringContent( JsonConvert.SerializeObject(newMessage), Encoding.UTF8, "application/json"); client.DefaultRequestHeaders.Add("jwt", jwt.Token); var response = await client.PostAsync("/editmessage", addMessageJson); var result = await response.Content.ReadAsStringAsync(); if (valid) { Assert.Equal(System.Net.HttpStatusCode.OK, response.StatusCode); } else { Assert.Equal(System.Net.HttpStatusCode.InternalServerError, response.StatusCode); } }
public async Task DeleteMessage(string receiverId, EditMessageDTO message) { string senderName = Context.User.FindFirst(ClaimTypes.Name).Value; ObjectId senderId = ObjectId.Parse(Context.User.FindFirst(ClaimTypes.NameIdentifier).Value); ObjectId receiver = ObjectId.Parse(receiverId); ObjectId?chatInteractionId = null; if (message.ChatInteractionId != null) { chatInteractionId = ObjectId.Parse(message.ChatInteractionId); } var data = _context.GetDb; var chatCollection = data.GetCollection <ChatInteraction>("ChatInteractions"); var userCollection = data.GetCollection <User>("Users"); var filterForSenderUser = Builders <User> .Filter.Eq("_id", senderId); var filterForReceiverUser = Builders <User> .Filter.Eq("_id", receiver); if (chatInteractionId != null) { // Delete message: var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId); var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id)); var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter); await chatCollection.UpdateOneAsync(filter, update); } else { var receiverUser = (await userCollection.FindAsync(filterForReceiverUser)).FirstOrDefault(); // check receiver contacts if they contain sender var chatInteractionWithSender = receiverUser.Contacts?.Where(contact => contact.Name == senderName).FirstOrDefault(); if (chatInteractionWithSender != null) { // Delete message: var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId); var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id)); var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter); await chatCollection.UpdateOneAsync(filter, update); } else { return; } } // Notify Users about Delete: var userConnections = _connections.GetConnections(receiver); foreach (var connectionId in userConnections) { await Clients.Client(connectionId).SendAsync("deletedMessage", new { SenderId = senderId.ToString(), Message = new MessageReturnDTO { Sender = senderName, Content = message.Message, Seen = false, Id = message.Id }, ReceiverId = receiver.ToString(), ChatInteractionId = chatInteractionId.ToString() }); } var senderConnections = _connections.GetConnections(senderId); foreach (var connectionId in senderConnections) { await Clients.Client(connectionId).SendAsync("deletedMessage", new { SenderId = senderId.ToString(), Message = new MessageReturnDTO { Sender = senderName, Content = message.Message, Seen = false, Id = message.Id }, ReceiverId = receiver.ToString(), ChatInteractionId = chatInteractionId.ToString() }); } }
public async Task <IActionResult> TestEdit() { /* * await _hub.EditMessage("60286f9f5e7da329ba5eb813", * new EditMessageDTO { ChatInteractionId = "602923c3301b700389cdb3e1", * Message = "TestEdit", * Id = "602923c3301b700389cdb3e0"}); * return Ok(); */ string senderName = "tes"; //Context.User.FindFirst(ClaimTypes.Name).Value; ObjectId senderId = ObjectId.Parse("60286f7c5e7da329ba5eb812"); //ObjectId.Parse(Context.User.FindFirst(ClaimTypes.NameIdentifier).Value); ObjectId receiver = ObjectId.Parse("60286f9f5e7da329ba5eb813"); ObjectId? chatInteractionId = null; EditMessageDTO message = new EditMessageDTO { ChatInteractionId = "602923c3301b700389cdb3e1", Message = "TestEdit", Id = "602923c3301b700389cdb3e0" }; if (message.ChatInteractionId != null) { chatInteractionId = ObjectId.Parse(message.ChatInteractionId); } var data = _context.GetDb; var chatCollection = data.GetCollection <ChatInteraction>("ChatInteractions"); var userCollection = data.GetCollection <User>("Users"); var filterForSenderUser = Builders <User> .Filter.Eq("_id", senderId); var filterForReceiverUser = Builders <User> .Filter.Eq("_id", receiver); if (chatInteractionId != null) { // Edit message: var filterChat = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId); var filterMessage = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id)); var filterMessageList = Builders <ChatInteraction> .Filter.ElemMatch("Messages", filterMessage); var filter = Builders <ChatInteraction> .Filter.And(filterChat, filterMessageList); var update = Builders <ChatInteraction> .Update.Set(chatOrigin => chatOrigin.Messages[-1].Content, message.Message); await chatCollection.UpdateOneAsync(filter, update); } else { var receiverUser = (await userCollection.FindAsync(filterForReceiverUser)).FirstOrDefault(); // check receiver contacts if they contain sender var chatInteractionWithSender = receiverUser.Contacts?.Where(contact => contact.Name == senderName).FirstOrDefault(); if (chatInteractionWithSender != null) { // Edit message: var filterChat = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId); var filterMessage = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id)); var filterMessageList = Builders <ChatInteraction> .Filter.ElemMatch(chat => chat.Messages, filterMessage); var filter = Builders <ChatInteraction> .Filter.And(filterChat, filterMessageList); var update = Builders <ChatInteraction> .Update.Set(chatOrigin => chatOrigin.Messages[-1].Content, message.Message); await chatCollection.UpdateOneAsync(filter, update); } else { return(BadRequest()); } } return(Ok()); }
public async Task <IActionResult> TestDelete() { /*await _hub.EditMessage("60286f9f5e7da329ba5eb813", * new EditMessageDTO * { * ChatInteractionId = "602923c3301b700389cdb3e1", * Id = "602923c3301b700389cdb3e0" * }); * return Ok();*/ string senderName = "tes"; //Context.User.FindFirst(ClaimTypes.Name).Value; ObjectId senderId = ObjectId.Parse("60286f7c5e7da329ba5eb812"); //ObjectId.Parse(Context.User.FindFirst(ClaimTypes.NameIdentifier).Value); ObjectId receiver = ObjectId.Parse("60286f9f5e7da329ba5eb813"); ObjectId? chatInteractionId = null; EditMessageDTO message = new EditMessageDTO { ChatInteractionId = "60287f294060e2f632006ca2", Message = "TestEdit", Id = "6029ab7a00f5dc00eeeed3cb" }; if (message.ChatInteractionId != null) { chatInteractionId = ObjectId.Parse(message.ChatInteractionId); } var data = _context.GetDb; var chatCollection = data.GetCollection <ChatInteraction>("ChatInteractions"); var userCollection = data.GetCollection <User>("Users"); var filterForSenderUser = Builders <User> .Filter.Eq("_id", senderId); var filterForReceiverUser = Builders <User> .Filter.Eq("_id", receiver); if (chatInteractionId != null) { // Delete message: var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId); var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id)); var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter); await chatCollection.UpdateOneAsync(filter, update); } else { var receiverUser = (await userCollection.FindAsync(filterForReceiverUser)).FirstOrDefault(); // check receiver contacts if they contain sender var chatInteractionWithSender = receiverUser.Contacts?.Where(contact => contact.Name == senderName).FirstOrDefault(); if (chatInteractionWithSender != null) { // Delete message: var filter = Builders <ChatInteraction> .Filter.Eq("_id", chatInteractionId); var innerFilter = Builders <Message> .Filter.Eq("_id", ObjectId.Parse(message.Id)); var update = Builders <ChatInteraction> .Update.PullFilter("Messages", innerFilter); await chatCollection.UpdateOneAsync(filter, update); } else { return(BadRequest()); } } return(Ok()); }