public void RecountRepliesForTopic(DataModels.Message parentMessage) { var messagesQuery = from message in DbContext.Messages where message.ParentId == parentMessage.Id select message; var messages = messagesQuery.ToList(); var updated = false; var replies = messages.Count(); if (parentMessage.ReplyCount != replies) { parentMessage.ReplyCount = replies; updated = true; } var lastReply = messages.LastOrDefault(); if (lastReply != null && parentMessage.LastReplyId != lastReply.Id) { parentMessage.LastReplyId = lastReply.Id; parentMessage.LastReplyPosted = lastReply.TimePosted; parentMessage.LastReplyById = lastReply.PostedById; updated = true; } if (updated) { DbContext.Update(parentMessage); DbContext.SaveChanges(); } }
public void RemoveTopicMessageBoards(DataModels.Message sourceMessage) { var records = DbContext.MessageBoards.Where(item => item.MessageId == sourceMessage.Id); DbContext.RemoveRange(records); DbContext.SaveChanges(); }
public void RemoveTopicParticipants(DataModels.Message sourceMessage, DataModels.Message targetMessage) { var records = DbContext.Participants.Where(item => item.MessageId == sourceMessage.Id).ToList(); DbContext.RemoveRange(records); DbContext.SaveChanges(); }
public void RemoveTopicViewlogs(DataModels.Message sourceMessage, DataModels.Message targetMessage) { var records = DbContext.ViewLogs.Where(item => item.TargetType == EViewLogTargetType.Message && (item.TargetId == sourceMessage.Id || item.TargetId == targetMessage.Id)).ToList(); DbContext.RemoveRange(records); DbContext.SaveChanges(); }
public JsonResult SubmitMessage(Models.Message msg) { try { DataModels.Message msgToAdd = new DataModels.Message(); msgToAdd.IsRead = false; msgToAdd.Name = msg.Name; msgToAdd.Msg = msg.MessageText; msgToAdd.Dtm = DateTime.Now; DataModels.GoodPushContext db = new DataModels.GoodPushContext(); db.Messages.Add(msgToAdd); msgToAdd.Id = db.SaveChanges(); int bgNum = db.Alerts.Where(w => w.IsRead == false).Count(); bgNum = +db.Messages.Where(w => w.IsRead == false).Count(); UrbanAirshipHelper.SendPush(msg.Name, msg.MessageText, bgNum); } catch (Exception ex) { return Json(new { status = String.Format("Saved but Notification failed to get delivered. Error: {0}", ex.Message) }); } return Json(new { status = "Success" }); }
public async Task RemoveTopicParticipants(DataModels.Message sourceMessage, DataModels.Message targetMessage) { var records = await DbContext.Participants.Where(item => item.MessageId == sourceMessage.Id).ToListAsync(); DbContext.RemoveRange(records); await DbContext.SaveChangesAsync(); }
public void Merge(DataModels.Message sourceMessage, DataModels.Message targetMessage) { UpdateMessagesParentId(sourceMessage, targetMessage); MessageRepository.RecountRepliesForTopic(targetMessage); RemoveTopicParticipants(sourceMessage, targetMessage); MessageRepository.RebuildParticipantsForTopic(targetMessage.Id); RemoveTopicViewlogs(sourceMessage, targetMessage); RemoveTopicPins(sourceMessage); RemoveTopicMessageBoards(sourceMessage); }
public void UpdateMessagesParentId(DataModels.Message sourceMessage, DataModels.Message targetMessage) { var sourceMessages = DbContext.Messages.Where(item => item.Id == sourceMessage.Id || item.ParentId == sourceMessage.Id).ToList(); foreach (var message in sourceMessages) { message.ParentId = targetMessage.Id; DbContext.Update(message); } DbContext.SaveChanges(); }
public async Task Merge(DataModels.Message sourceMessage, DataModels.Message targetMessage) { UpdateMessagesParentId(sourceMessage, targetMessage); await MessageRepository.RecountRepliesForTopic(targetMessage); await RemoveTopicParticipants(sourceMessage, targetMessage); await MessageRepository.RebuildParticipantsForTopic(targetMessage.Id); RemoveTopicViewlogs(sourceMessage, targetMessage); RemoveTopicBookmarks(sourceMessage); RemoveTopicMessageBoards(sourceMessage); }
public async Task UpdateMessageRecord(InputModels.ProcessedMessageInput message, DataModels.Message record) { record.OriginalBody = message.OriginalBody; record.DisplayBody = message.DisplayBody; record.ShortPreview = message.ShortPreview; record.LongPreview = message.LongPreview; record.Cards = message.Cards; record.TimeEdited = DateTime.Now; record.EditedById = UserContext.ApplicationUser.Id; record.Processed = true; DbContext.Update(record); await DbContext.SaveChangesAsync(); }
async Task MergeReply(DataModels.Message record, InputModels.MessageInput input, ServiceModels.ServiceResponse serviceResponse) { var newBody = $"{record.OriginalBody}\n{input.Body}"; var processedMessage = await ProcessMessageInput(serviceResponse, newBody); if (serviceResponse.Success) { await UpdateMessageRecord(processedMessage, record); serviceResponse.RedirectPath = UrlHelper.DisplayMessage(record.Id); await ForumHub.Clients.All.SendAsync("updated-message", new HubModels.Message { TopicId = record.ParentId > 0 ? record.ParentId : record.Id, MessageId = record.Id }); } }
async Task RemoveMessageArtifacts(DataModels.Message record) { var messageBoards = await DbContext.MessageBoards.Where(m => m.MessageId == record.Id).ToListAsync(); foreach (var messageBoard in messageBoards) { DbContext.MessageBoards.Remove(messageBoard); } var messageThoughts = await DbContext.MessageThoughts.Where(mt => mt.MessageId == record.Id).ToListAsync(); foreach (var messageThought in messageThoughts) { DbContext.MessageThoughts.Remove(messageThought); } var notifications = DbContext.Notifications.Where(item => item.MessageId == record.Id).ToList(); foreach (var notification in notifications) { DbContext.Notifications.Remove(notification); } DbContext.Messages.Remove(record); }
public async Task <DataModels.Message> CreateMessageRecord(InputModels.ProcessedMessageInput processedMessage) { var now = DateTime.Now; var record = new DataModels.Message { OriginalBody = processedMessage.OriginalBody, DisplayBody = processedMessage.DisplayBody, ShortPreview = processedMessage.ShortPreview, LongPreview = processedMessage.LongPreview, Cards = processedMessage.Cards, TimePosted = now, TimeEdited = now, PostedById = CurrentUser.Id, }; DbContext.Messages.Add(record); await DbContext.SaveChangesAsync(); await NotifyMentionedUsers(processedMessage.MentionedUsers, record.Id); return(record); }
public async Task RecountRepliesForTopic(DataModels.Message parentMessage) { var messagesQuery = from message in DbContext.Messages where message.ParentId == parentMessage.Id select new { message.Id, message.TimePosted, message.PostedById }; var replyCount = await messagesQuery.CountAsync(); var updated = false; if (parentMessage.ReplyCount != replyCount) { parentMessage.ReplyCount = replyCount; updated = true; } var lastReply = await messagesQuery.LastOrDefaultAsync(); if (lastReply is null) { parentMessage.LastReplyId = 0; parentMessage.LastReplyPosted = parentMessage.TimePosted; parentMessage.LastReplyById = parentMessage.PostedById; updated = true; } else if (parentMessage.LastReplyId != lastReply.Id) { parentMessage.LastReplyId = lastReply.Id; parentMessage.LastReplyPosted = lastReply.TimePosted; parentMessage.LastReplyById = lastReply.PostedById; updated = true; } if (updated) { DbContext.Update(parentMessage); await DbContext.SaveChangesAsync(); } }
public async Task DeleteMessageFromTopic(DataModels.Message message, DataModels.Topic topic) { var directRepliesQuery = from m in DbContext.Messages where m.ReplyId == message.Id where !m.Deleted select m; foreach (var reply in directRepliesQuery) { reply.OriginalBody = $"[quote]{message.OriginalBody}\n" + $"Message deleted by {CurrentUser.ApplicationUser.DisplayName} on {DateTime.Now.ToString("MMMM dd, yyyy")}[/quote]" + reply.OriginalBody; reply.ReplyId = 0; DbContext.Update(reply); } message.Deleted = true; DbContext.Update(message); await DbContext.SaveChangesAsync(); }
public DataModels.Message CreateMessageRecord(InputModels.ProcessedMessageInput processedMessage, DataModels.Message replyRecord) { var parentId = 0; var replyId = 0; DataModels.Message parentMessage = null; if (replyRecord != null) { if (replyRecord.ParentId == 0) { parentId = replyRecord.Id; replyId = 0; parentMessage = replyRecord; } else { parentId = replyRecord.ParentId; replyId = replyRecord.Id; parentMessage = DbContext.Messages.First(item => item.Id == replyRecord.ParentId); } } var currentTime = DateTime.Now; var record = new DataModels.Message { OriginalBody = processedMessage.OriginalBody, DisplayBody = processedMessage.DisplayBody, ShortPreview = processedMessage.ShortPreview, LongPreview = processedMessage.LongPreview, Cards = processedMessage.Cards, TimePosted = currentTime, TimeEdited = currentTime, LastReplyPosted = currentTime, PostedById = UserContext.ApplicationUser.Id, EditedById = UserContext.ApplicationUser.Id, LastReplyById = UserContext.ApplicationUser.Id, ParentId = parentId, ReplyId = replyId, Processed = true }; DbContext.Messages.Add(record); DbContext.SaveChanges(); if (replyId > 0) { replyRecord.LastReplyId = record.Id; replyRecord.LastReplyById = UserContext.ApplicationUser.Id; replyRecord.LastReplyPosted = currentTime; DbContext.Update(replyRecord); if (replyRecord.PostedById != UserContext.ApplicationUser.Id) { var notification = new DataModels.Notification { MessageId = record.Id, UserId = replyRecord.PostedById, TargetUserId = UserContext.ApplicationUser.Id, Time = DateTime.Now, Type = Enums.ENotificationType.Quote, Unread = true, }; DbContext.Notifications.Add(notification); } } if (parentMessage != null && parentId != replyId) { parentMessage.ReplyCount++; parentMessage.LastReplyId = record.Id; parentMessage.LastReplyById = UserContext.ApplicationUser.Id; parentMessage.LastReplyPosted = currentTime; DbContext.Update(parentMessage); if (parentMessage.PostedById != UserContext.ApplicationUser.Id) { var notification = new DataModels.Notification { MessageId = record.Id, UserId = parentMessage.PostedById, TargetUserId = UserContext.ApplicationUser.Id, Time = DateTime.Now, Type = Enums.ENotificationType.Reply, Unread = true, }; DbContext.Notifications.Add(notification); } } NotifyMentionedUsers(processedMessage.MentionedUsers, record.Id); var topicId = parentId == 0 ? record.Id : parentId; UpdateTopicParticipation(topicId, UserContext.ApplicationUser.Id, DateTime.Now); DbContext.SaveChanges(); return(record); }