public async Task <ActionResult <Message> > SendGroupMessage(string roomId, [FromBody] MessageSentForm sentMessage) { if (!ModelState.IsValid) { return(BadRequest(new { message = "Message form is not valid" })); } var room = await roomRepository.GetRoom(roomId); if (room == null) { return(NotFound(new { message = "Couldn't find the room in the database" })); } await hubContext.Clients.Group(room.RoomName).SendAsync(KeyConstants.receiveNewRoomMessage, sentMessage, roomId); var updatedRoom = await roomRepository.AddMessageToRoom(roomId, sentMessage); var newMessage = updatedRoom.RoomMessages.Find(m => m.Content == sentMessage.Content && m.SenderName == sentMessage.SenderName); if (newMessage == null) { return(NotFound(new { message = "Couldn't find the new room message in the database" })); } return(CreatedAtRoute("GetRoomMessage", new { roomId = updatedRoom.Id.ToString(), roomMessageId = newMessage.Id.ToString() }, newMessage)); }
public async Task <Message> AddPublicMessage(MessageSentForm sentMessage) { Message message = new Message { Id = ObjectId.GenerateNewId().ToString(), SenderId = sentMessage.SenderId, SenderName = sentMessage.SenderName, Content = sentMessage.Content, SentDate = DateTime.Now }; await publicMessages.InsertOneAsync(message); return(message); }
public async Task <ActionResult <Message> > SendPublicMessage([FromBody] MessageSentForm newMessage) { if (!ModelState.IsValid) { return(BadRequest(new { message = "Message form is not valid" })); } var messageToDb = await publicRepository.AddPublicMessage(newMessage); if (messageToDb == null) { return(NotFound(new { message = "Public message was not added to the database" })); } await hubContext.Clients.All.SendAsync(KeyConstants.receiveNewPublicMessage, newMessage); return(CreatedAtRoute("GetMessage", new { id = messageToDb.Id.ToString() }, messageToDb)); }
public async Task <Room> AddMessageToRoom(string roomId, MessageSentForm sentMessage) { Message message = new Message { Id = ObjectId.GenerateNewId().ToString(), SenderId = sentMessage.SenderId, SenderName = sentMessage.SenderName, Content = sentMessage.Content, SentDate = DateTime.Now }; var filter = Builders <Room> .Filter.Eq(r => r.Id, roomId); var update = Builders <Room> .Update.Push(r => r.RoomMessages, message); return(await rooms.FindOneAndUpdateAsync <Room>(filter, update, new FindOneAndUpdateOptions <Room> { ReturnDocument = ReturnDocument.After })); }
public async Task <User> AddPrivateMessageToContact(string senderId, string receiverId, MessageSentForm sentMessage) { Message message = new Message { Id = ObjectId.GenerateNewId().ToString(), SenderId = sentMessage.SenderId, SenderName = sentMessage.SenderName, Content = sentMessage.Content, SentDate = DateTime.Now }; var filter = Builders <User> .Filter.Eq(u => u.Id, senderId) & Builders <User> .Filter.ElemMatch(x => x.Contacts, Builders <Contact> .Filter.Eq(c => c.ContactId, receiverId)); var update = Builders <User> .Update.Push(u => u.Contacts[-1].Messages, message); return(await users.FindOneAndUpdateAsync <User>(filter, update, new FindOneAndUpdateOptions <User> { ReturnDocument = ReturnDocument.After })); }
public async Task <ActionResult <Message> > SendPrivateMessage(string receiverId, [FromBody] MessageSentForm sentMessage) { if (!ModelState.IsValid) { return(BadRequest(new { message = "Message form is not valid" })); } var contactValid = await accountRepository.GetUser(receiverId); if (contactValid == null) { return(BadRequest(new { message = "Cannot find the contact in the database" })); } var senderDocument = await accountRepository.GetUser(sentMessage.SenderId); if (senderDocument == null) { return(BadRequest(new { message = "Cannot find the user in the database" })); } var senderConnection = await userConnectedRepository.GetConnectedUserByUserId(sentMessage.SenderId); if (senderConnection == null) { return(BadRequest(new { message = "Verify your connection to the SignalR Hub" })); } var senderConnectionId = senderConnection.ConnectionId; var updatedSender = await userRepository.AddPrivateMessageToContact(sentMessage.SenderId, receiverId, sentMessage); if (updatedSender == null) { return(NotFound(new { message = "Private message was not added to the database" })); } var newSenderPrivateMessage = updatedSender.Contacts.Find(c => c.ContactId == receiverId).Messages.Find(m => m.SenderName == sentMessage.SenderName && m.Content == sentMessage.Content); if (newSenderPrivateMessage == null) { return(NotFound(new { message = "Couldn't find the new private message in the database" })); } var updatedReceiver = await userRepository.AddPrivateMessageToContact(receiverId, sentMessage.SenderId, sentMessage); if (updatedReceiver == null) { return(NotFound(new { message = "Private message was not added to the database" })); } var newReceiverPrivateMessage = updatedReceiver.Contacts.Find(c => c.ContactId == sentMessage.SenderId).Messages.Find(m => m.SenderName == sentMessage.SenderName && m.Content == sentMessage.Content); if (newReceiverPrivateMessage == null) { return(NotFound(new { message = "Couldn't find the new private message in the database" })); } var receiverConnection = await userConnectedRepository.GetConnectedUserByUserId(receiverId); if (receiverConnection == null) { await hubContext.Clients.Client(senderConnectionId).SendAsync(KeyConstants.addedPrivateMessageOffline, newSenderPrivateMessage, receiverId); return(CreatedAtRoute("GetContactMessage", new { userId = sentMessage.SenderId.ToString(), contactId = receiverId, messageId = newSenderPrivateMessage.Id }, newSenderPrivateMessage)); } var receiverConnectionId = receiverConnection.ConnectionId; await hubContext.Clients.Client(senderConnectionId).SendAsync(KeyConstants.receiveNewPrivateMessage, newSenderPrivateMessage, receiverId); await hubContext.Clients.Client(receiverConnectionId).SendAsync(KeyConstants.receiveNewPrivateMessage, newReceiverPrivateMessage, sentMessage.SenderId); return(CreatedAtRoute("GetContactMessage", new { userId = sentMessage.SenderId.ToString(), contactId = receiverId, messageId = newSenderPrivateMessage.Id }, newSenderPrivateMessage)); }