public PrivateMessage Create(string subject, string fullText, User user, List<User> toUsers) { if (String.IsNullOrWhiteSpace(subject)) throw new ArgumentNullException("subject"); if (String.IsNullOrWhiteSpace(fullText)) throw new ArgumentNullException("fullText"); if (user == null) throw new ArgumentNullException("user"); if (toUsers == null || toUsers.Count == 0) throw new ArgumentException("toUsers must include at least one user.", "toUsers"); var names = user.Name; foreach (var toUser in toUsers) names += ", " + toUser.Name; var now = DateTime.UtcNow; var pm = new PrivateMessage { Subject = TextParsingService.EscapeHtmlAndCensor(subject), UserNames = names, LastPostTime = now }; pm.PMID = PrivateMessageRepository.CreatePrivateMessage(pm); PrivateMessageRepository.AddUsers(pm.PMID, new List<int> {user.UserID}, now, true); PrivateMessageRepository.AddUsers(pm.PMID, toUsers.Select(u => u.UserID).ToList(), now.AddSeconds(-1), false); var post = new PrivateMessagePost { FullText = TextParsingService.ForumCodeToHtml(fullText), Name = user.Name, PMID = pm.PMID, PostTime = now, UserID = user.UserID }; PrivateMessageRepository.AddPost(post); return pm; }
public virtual int AddPost(PrivateMessagePost post) { var users = GetUsers(post.PMID); foreach (var user in users) _cacheHelper.RemoveCacheObject(CacheKeys.PMCount(user.UserID)); _sqlObjectFactory.GetConnection().Using(connection => post.PMPostID = Convert.ToInt32( connection.Command("INSERT INTO pf_PrivateMessagePost (PMID, UserID, Name, PostTime, FullText) VALUES (@PMID, @UserID, @Name, @PostTime, @FullText)") .AddParameter("@PMID", post.PMID) .AddParameter("@UserID", post.UserID) .AddParameter("@Name", post.Name) .AddParameter("@PostTime", post.PostTime) .AddParameter("@FullText", post.FullText) .ExecuteAndReturnIdentity())); return post.PMPostID; }
public void ReplyMapsAndPresistsPost() { var service = GetService(); var post = new PrivateMessagePost(); _mockPMRepo.Setup(p => p.AddPost(It.IsAny<PrivateMessagePost>())).Callback<PrivateMessagePost>(p => post = p); var user = new User(1, DateTime.MinValue) {Name = "jeff"}; var pm = new PrivateMessage {PMID = 2}; var text = "mah message"; _mockTextParse.Setup(t => t.ForumCodeToHtml(text)).Returns(text); _mockPMRepo.Setup(p => p.GetUsers(pm.PMID)).Returns(new List<PrivateMessageUser> {new PrivateMessageUser {UserID = user.UserID}}); service.Reply(pm, text, user); Assert.AreEqual(text, post.FullText); Assert.AreEqual(user.Name, post.Name); Assert.AreEqual(user.UserID, post.UserID); Assert.AreEqual(pm.PMID, post.PMID); }
public void CreatePostPersist() { var user = new User(12, DateTime.MinValue) { Name = "jeff" }; var to1 = new User(45, DateTime.MinValue); var to2 = new User(67, DateTime.MinValue); var service = GetService(); _mockPMRepo.Setup(p => p.CreatePrivateMessage(It.IsAny<PrivateMessage>())).Returns(69); var post = new PrivateMessagePost(); _mockPMRepo.Setup(p => p.AddPost(It.IsAny<PrivateMessagePost>())).Callback<PrivateMessagePost>(p => post = p); _mockTextParse.Setup(t => t.ForumCodeToHtml("oihefio")).Returns("oihefio"); service.Create("ohqefwwf", "oihefio", user, new List<User> { to1, to2 }); Assert.AreEqual("oihefio", post.FullText); Assert.AreEqual("jeff", post.Name); Assert.AreEqual(69, post.PMID); Assert.AreEqual(user.UserID, post.UserID); }
public void Reply(PrivateMessage pm, string fullText, User user) { if (pm == null || pm.PMID == 0) throw new ArgumentException("Can't reply to a PM that hasn't been persisted.", "pm"); if (String.IsNullOrWhiteSpace(fullText)) throw new ArgumentNullException("fullText"); if (user == null) throw new ArgumentNullException("user"); if (!IsUserInPM(user, pm)) throw new Exception("Can't add a PM reply for a user not part of the PM."); var post = new PrivateMessagePost { FullText = TextParsingService.ForumCodeToHtml(fullText), Name = user.Name, PMID = pm.PMID, PostTime = DateTime.UtcNow, UserID = user.UserID }; PrivateMessageRepository.AddPost(post); var users = PrivateMessageRepository.GetUsers(pm.PMID); foreach (var u in users) PrivateMessageRepository.SetArchive(pm.PMID, u.UserID, false); var now = DateTime.UtcNow; PrivateMessageRepository.UpdateLastPostTime(pm.PMID, now); PrivateMessageRepository.SetLastViewTime(pm.PMID, user.UserID, now); }