Esempio n. 1
0
        private int FindNumberOfUnreadMessages(ApplicationUser me, Group group)
        {
            // Find number of unread messages.
            LastGroupVisit lastVisit = me.LastGroupVisits
                                       .Where(x => x.GroupId == group.GroupId)
                                       .FirstOrDefault();

            if (lastVisit == null)
            {
                return(group.Statuses.Count());
            }
            else
            {
                return(group.Statuses
                       .Where(x => x.DateCreatedUtc > lastVisit.VisitTimeUtc && !x.CreatorId.Equals(me.Id))
                       .Count());
            }
        }
Esempio n. 2
0
        public async Task <IHttpActionResult> GetStatuses(int groupId, DateTime sinceWhen)
        {
            string          userId = User.Identity.GetUserId();
            ApplicationUser me     = db.Users.Find(userId);

            Group group = await db.Groups.FindAsync(groupId);

            if (group == null)
            {
                return(BadRequest(string.Format("Group {0} doesn't exit.", groupId)));
            }

            if (!group.Members.Any(x => x.Id.Equals(userId)))
            {
                return(BadRequest("You're not in this group."));
            }

            string myName = User.Identity.GetUserName();

            var statuses = await db.Status
                           .Where(s => s.GroupId == group.GroupId && s.DateCreatedUtc > sinceWhen)
                           .Select(s => s)
                           .OrderByDescending(s => s.DateCreatedUtc)
                           .Take(QueryPageSize)
                           .ToListAsync();

            UIStatus[] uiStatuses = statuses.Select(
                s => new UIStatus()
            {
                Id                = s.StatusId,
                CreatorName       = s.Creator.Nickname,
                CreatorId         = s.Creator.Id,
                DateCreatedUtc    = s.DateCreatedUtc,
                DateCreatedLocal  = s.DateCreatedLocal,
                DateModifiedUtc   = s.DateModifiedUtc,
                DateModifiedLocal = s.DateModifiedLocal,
                Text              = s.Text,
                IsRtl             = ControllerUtils.IsRtl(s.Text),
                City              = s.City,
                IsCreatedByUser   = s.Creator.UserName.Equals(myName),
                Views             = ControllerUtils.GetUIStatusViews(s.StatusViews)
            }).ToArray();

            // Record group visit.
            LastGroupVisit lastVisit = me.LastGroupVisits.Where(x => x.GroupId == groupId).FirstOrDefault();

            if (lastVisit == null)
            {
                db.LastGroupVisits.Add(new LastGroupVisit()
                {
                    GroupId      = groupId,
                    Group        = group,
                    Visitor      = me,
                    VisitorId    = me.Id,
                    VisitTimeUtc = DateTime.UtcNow
                });
                await db.SaveChangesAsync();
            }
            else
            {
                lastVisit.VisitTimeUtc = DateTime.UtcNow;
                db.LastGroupVisits.Attach(lastVisit);
                db.Entry(lastVisit).Property(x => x.VisitTimeUtc).IsModified = true;
                await db.SaveChangesAsync();
            }

            return(Ok(uiStatuses));
        }