コード例 #1
0
        public ActionResult Reply(int?userId, int?threadId, string body, HttpPostedFileBase uploadedFile)
        {
            if (userId == null || threadId == null || string.IsNullOrEmpty(body))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var currentUser = ctx.CurrentUser as ParticipantUser;

            db.Users.Attach(currentUser);
            var thread = threadBusiness.GetPersonalThread(currentUser, userId.Value, threadId.Value, false);

            if (thread != null)
            {
                threadBusiness.AddMessage(thread, body, uploadedFile);
                db.SaveChanges();
            }

            return(RedirectToIndex(userId.Value));
        }
コード例 #2
0
ファイル: HomeController.cs プロジェクト: llenroc/Oryzae
        public ActionResult CreatePersonalThread(string body, HttpPostedFileBase uploadedFile)
        {
            if (string.IsNullOrEmpty(body))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            // ユーザーのマイページスレッドを新規追加する
            db.Users.Attach(ctx.CurrentUser);

            var newThread = new PersonalThread()
            {
                // マイページスレッドにはスレッド名は不要だが、Required属性がついているため日時を設定しておく。
                ThreadName = ctx.Now.ToString("yyyy/MM/dd HH:mm:ss"),
                // マイページスレッドには期間は不要。
                Duration  = null,
                OwnerUser = (ParticipantUser)ctx.CurrentUser
            };

            db.Threads.Add(newThread);
            var newMessage = threadBusiness.AddMessage(newThread, body, uploadedFile);

            try
            {
                db.SaveChanges();
            }
            catch (System.Data.Entity.Infrastructure.DbUpdateException ex)
            {
                var es  = ex.Entries.ToArray();
                var iex = ex.InnerException as OptimisticConcurrencyException;
                System.Diagnostics.Debugger.Break();
                throw;
            }

            // 自分のおよび友人のタイムラインを更新する
            // TODO: 非同期処理の検討
            var myTimeLine = new Timeline
            {
                OwnerID         = ctx.CurrentUser.ID,
                Timestamp       = ctx.Now,
                Type            = TimelineType.PersonalThread,
                RouteValuesJSON = Timeline.ToJSON(new { threadId = newThread.ID }),
            };
            var friends = new Business.FriendGraph(db)
                          .GetFriends(ctx.CurrentUser.ID);
            var summary         = newMessage.BodySummary;
            var friendTimeLines = friends.Select(u => new Timeline
            {
                OwnerID         = u.ID,
                Timestamp       = ctx.Now,
                Type            = TimelineType.FriendThread,
                SourceName      = ctx.CurrentUser.DisplayName,
                Summary         = summary,
                ActionName      = "Index",
                ControllerName  = "User",
                RouteValuesJSON = Timeline.ToJSON(new { id = ctx.CurrentUser.ID, threadId = newThread.ID }),
            });

            using (var publisher = new Business.TimelinePublisher())
            {
                publisher.Publish(new[] { myTimeLine }.Concat(friendTimeLines));
            }

            return(RedirectToAction("Index"));
        }