Esempio n. 1
0
        public async Task <ActionResult <IEnumerable <MessageViewModel> > > Messages(Guid circleId, [FromBody] ReadMessagesOptions options)
        {
            Guid userId     = _userManager.ParseUserId(User);
            var  membership = await GetMembershipIncludingCircle(userId, circleId);

            if (membership == null)
            {
                return(NotFound());
            }

            IEnumerable <Message> messages = _db.Messages
                                             .Where(m => m.CircleId == circleId)
                                             .OrderBy(m => m.SentAt); // FIXME: da, implement paging

            if (options == ReadMessagesOptions.Unread)
            {
                messages = messages.TakeLast(membership.NumberOfUnreadMessages); // FIXME: da, check generated SQL
            }
            membership.NumberOfReadMessages = membership.Circle.NumberOfMessages;
            await _db.SaveChangesAsync();

            Debug.Assert(membership.NumberOfUnreadMessages == 0);
            return(Ok(messages.Select(m => new MessageViewModel
            {
                Id = m.Id,
                ContentType = m.ContentType,
                Content = m.Content,
                SentAt = m.SentAt,
                SentByMe = m.SentBy == userId,
                SenderName = m.SenderName,
            })));
        }
Esempio n. 2
0
 public async Task <IEnumerable <MessageViewModel> > ReadMessages(Guid circleId, ReadMessagesOptions options)
 {
     return(await _httpClient.PostJsonAsync <IEnumerable <MessageViewModel> >(Urls.GetPostReadMessages(circleId), options));
 }