Example #1
0
        /// <summary>
        /// スレッドに属するメッセージの添付ファイルを取得します。
        /// </summary>
        /// <remarks>
        /// スレッドの読み書きが可能かどうかはチェック済みであることを前提とします。
        /// </remarks>
        /// <param name="thread"></param>
        /// <param name="messageId"></param>
        /// <returns>
        /// メッセージとドキュメントのタプル。
        /// タプル自体はnullになりませんが、メッセージやドキュメントはnullである可能性があります。
        /// </returns>
        public Tuple <Models.Message, Models.Document> GetAttachment(Models.Thread thread, int messageId)
        {
            if (thread == null)
            {
                throw new ArgumentNullException("thread");
            }
            if (messageId <= 0)
            {
                throw new ArgumentOutOfRangeException("messageId");
            }

            var messageQuery =
                from gt in db.Threads where gt.ID == thread.ID
                from m in gt.Message where m.ID == messageId
                select m;

            LogUtility.DebugWriteQuery(messageQuery);

            var message  = messageQuery.FirstOrDefault();
            var document = (message != null)
                ? db.Documents.FirstOrDefault(d => d.ID == message.AttachedDocumentID)
                : null;

            return(Tuple.Create(message, document));
        }
Example #2
0
        /// <summary>
        /// データベースコンテキストに新しいメッセージを追加して返します。
        /// 保存処理は行いません。
        /// </summary>
        /// <param name="thread"></param>
        /// <param name="body"></param>
        /// <param name="uploadedFile"></param>
        /// <returns></returns>
        public Message AddMessage(Models.Thread thread, string body, HttpPostedFileBase uploadedFile)
        {
            Debug.Assert(thread != null, "thread is null.");
            Debug.Assert(!string.IsNullOrEmpty(body), "body is null or empty.");

            Message message = new Message
            {
                Body = body,
                Sent = this.ctx.Now,
            };

            // メッセージ投稿処理
#if DEBUG
            var currentUserState = this.db.Entry(this.ctx.CurrentUser).State;
            Debug.Assert(currentUserState == System.Data.EntityState.Unchanged, "CurrentUser is " + currentUserState);
#endif

            AttachFile(message, uploadedFile);

            message.SentUser = this.ctx.CurrentUser;
            message.Thread   = thread;
            db.Messages.Add(message);

            return(message);
        }
Example #3
0
        //TODO: メンションの処理を入れる。
        internal async Task <Guid> CreateThread(ThreadMessage message, string userId)
        {
            var threadId = Guid.NewGuid();

            var thread = new Models.Thread()
            {
                Id = threadId,
                ApplicationUserId = userId,
                PostId            = message.PostId,
                Text = message.MessageContext
            };

            _context.Add(thread);
            await _context.SaveChangesAsync();

            return(threadId);
        }
        public void ThreadEditSuccess()
        {
            Models.Thread uneditedThread;

            using (var context = GetNewContext())
            {
                var threadService = GetThreadService(context);

                uneditedThread = threadService.GetThread(20);
            }

            using (var context = GetNewContext())
            {
                var threadService = GetThreadService(context);

                var thread = new Models.Thread()
                {
                    ThreadId = 20,
                    Title    = "New Title",
                    Content  = "New Content",
                    Modified = DateTime.Now,
                    Created  = DateTime.Now,
                    Votes    = new List <ThreadVote>()
                    {
                        new ThreadVote()
                        {
                            VoteScore = 1
                        }
                    }
                };

                threadService.EditThread(thread);
                var editedThread = threadService.GetThread(thread.ThreadId);

                Assert.AreEqual(thread.ThreadId, editedThread.ThreadId);
                Assert.AreEqual(thread.Title, editedThread.Title);
                Assert.AreEqual(thread.Content, editedThread.Content);
                Assert.AreNotEqual(uneditedThread.Title, editedThread.Title);
                Assert.AreNotEqual(uneditedThread.Content, editedThread.Content);
            }
        }
Example #5
0
 public void SaveThread(Models.Thread thread)
 {
     this.context.Threads.Add(thread);
     this.context.SaveChanges();
 }
Example #6
0
 /// <summary>
 /// 指定したスレッドを削除します。
 /// </summary>
 /// <param name="thread">Thread</param>
 /// <returns></returns>
 internal async Task DeleteThread(Models.Thread thread)
 {
     _context.Remove(thread);
     await _context.SaveChangesAsync();
 }
Example #7
0
        /// <summary>
        /// 対象のスレッドのメッセージを更新します。
        /// </summary>
        /// <param name="thread">更新対象のThreadインスタンス</param>
        /// <param name="message">更新するメッセージ</param>
        /// <returns></returns>
        internal async Task UpdateThread(Models.Thread thread, string message)
        {
            thread.Text = message;

            await _context.SaveChangesAsync();
        }