public async Task <IInfiniteScrollResult <User> > GetListForInfiniteScroll(IInfiniteScroll scroll, long userId)
 {
     return(await DatabaseContext.Friendships
            .Where(f => f.InvitedId == userId && f.Inviting.AnonimisationDate == null).Select(u => u.Inviting)
            .Union(DatabaseContext.Friendships.Where(f => f.InvitingId == userId && f.Invited.AnonimisationDate == null).Select(u => u.Invited))
            .OrderBy(u => u.FirstName)
            .GetInfiniteScrollResult(scroll));
 }
Beispiel #2
0
        public async Task <IInfiniteScrollResult <FriendListItemDTO> > GetFriends(IInfiniteScroll scroll, long userId)
        {
            var data = await Unit.Friendships.GetListForInfiniteScroll(scroll, userId);

            return(new InfiniteScrollResult <FriendListItemDTO>
            {
                Items = Mapper.Map <List <FriendListItemDTO> >(data.Items),
                Scroll = data.Scroll
            });
        }
Beispiel #3
0
        public async Task <IInfiniteScrollResult <LinkedItemDTO> > GetFriends(IInfiniteScroll scroll, long userId)
        {
            var data = await Unit.Users.GetListForInfiniteScroll(scroll, u => u.AcceptedFriends, q => q.FirstName, OrderDirection.ASC);

            return(new InfiniteScrollResult <LinkedItemDTO>
            {
                Items = Mapper.Map <List <LinkedItemDTO> >(data.Items),
                Scroll = data.Scroll
            });
        }
Beispiel #4
0
        public async Task <IInfiniteScrollResult <MessageDTO> > GetMessages(IInfiniteScroll scroll, long userId, long friendId)
        {
            var data = await Unit.Messages.GetListForInfiniteScroll(
                scroll,
                m => (m.SenderId == userId && m.ReceiverId == friendId) || (m.ReceiverId == userId && m.SenderId == friendId),
                s => s.DateCreated, OrderDirection.DESC);

            return(new InfiniteScrollResult <MessageDTO>
            {
                Items = Mapper.Map <List <MessageDTO> >(data.Items),
                Scroll = data.Scroll
            });
        }
Beispiel #5
0
        public async Task <IInfiniteScrollResult <LastMessage> > GetLastMessages(IInfiniteScroll scroll, long userId)
        {
            var data = await Unit.Conversations.GetLastMessagesForEachFriend(scroll, userId);

            var readings = await Unit.MessagesReadings.GetByReceiverId(userId);

            var items = MapLastMessages(data.Items, readings);

            return(new InfiniteScrollResult <LastMessage>
            {
                Items = items,
                Scroll = data.Scroll
            });
        }
Beispiel #6
0
 public static async Task <IInfiniteScrollResult <T> > GetInfiniteScrollResult <T>(this IQueryable <T> query, IInfiniteScroll scroll) where T : class
 {
     return(new InfiniteScrollResult <T>
     {
         Scroll = scroll,
         Items = await query.Skip(scroll.RowsLoaded).Take(scroll.UnitSize).ToListAsync()
     });
 }
Beispiel #7
0
 public virtual async Task <IInfiniteScrollResult <TEntity> > GetListForInfiniteScroll(IInfiniteScroll scroll, Expression <Func <TEntity, bool> > predicate, Expression <Func <TEntity, object> > includeExpression, Expression <Func <TEntity, object> > orderExpression, OrderDirection direction)
 {
     if (direction == OrderDirection.ASC)
     {
         return(await Context.Set <TEntity>().Include(includeExpression).Where(predicate).OrderBy(orderExpression).GetInfiniteScrollResult(scroll));
     }
     return(await Context.Set <TEntity>().Include(includeExpression).Where(predicate).OrderByDescending(orderExpression).GetInfiniteScrollResult(scroll));
 }
Beispiel #8
0
 public virtual async Task <IInfiniteScrollResult <TEntity> > GetListForInfiniteScroll(IInfiniteScroll scroll, Expression <Func <TEntity, bool> > predicate)
 {
     return(await Context.Set <TEntity>().Where(predicate).GetInfiniteScrollResult(scroll));
 }
Beispiel #9
0
 public virtual async Task <IInfiniteScrollResult <TEntity> > GetListForInfiniteScroll(IInfiniteScroll scroll)
 {
     return(await Context.Set <TEntity>().GetInfiniteScrollResult(scroll));
 }
 public async Task <IInfiniteScrollResult <Message> > GetLastMessagesForEachFriend(IInfiniteScroll scroll, long userId)
 {
     return(await DatabaseContext.Messages
            .Include(m => m.Sender)
            .Include(m => m.Receiver)
            .Where(m => m.ReceiverId == userId || m.SenderId == userId)
            .GroupBy(m => m.SenderId)
            .OrderByDescending(m => m.Max(o => o.DateCreated))
            .Select(m => m.LastOrDefault())
            .GetInfiniteScrollResult(scroll));
 }
 public async Task <IInfiniteScrollResult <Message> > GetListForInfiniteScroll(IInfiniteScroll scroll, long principalId, long friendId)
 {
     return(await DatabaseContext.Messages
            .Where(m => (m.ReceiverId == principalId && m.SenderId == friendId) ||
                   (m.ReceiverId == friendId && m.SenderId == principalId))
            .OrderByDescending(m => m.DateCreated)
            .GetInfiniteScrollResult(scroll));
 }
        public async Task <IInfiniteScrollResult <NotificationDTO> > GetNotifications(IInfiniteScroll scroll, long userId)
        {
            var reading = await Unit.NotificationsReadings.Get(r => r.UserId == userId);

            var data = await Unit.InvitationNotifications.GetListForInfiniteScroll(scroll, n => n.UserId == userId, n => n.Friend, n => n.DateCreated, OrderDirection.DESC);

            var activeIds = data.Items.Where(x => !x.Accepted.HasValue).Select(x => x.Id).ToList();
            var items     = Mapper.Map <List <NotificationDTO> >(data.Items);

            items.ForEach(i =>
            {
                i.CanAccept = activeIds.Contains(i.Id) && i.Type == NotificationType.InvitationSent;
                i.Unread    = reading == null ? true : reading.LastReadingDate < i.DateCreated;
            });

            return(new InfiniteScrollResult <NotificationDTO>
            {
                Items = items,
                Scroll = data.Scroll
            });
        }
 public async Task <IInfiniteScrollResult <Conversation> > GetLastMessagesForEachFriend(IInfiniteScroll scroll, long userId)
 {
     return(await DatabaseContext.Conversations
            .Include(c => c.LastMessage)
            .ThenInclude(m => m.Sender)
            .Include(c => c.LastMessage)
            .ThenInclude(m => m.Receiver)
            .Where(c => c.FirstUserId == userId || c.SecondUserId == userId)
            .OrderByDescending(c => c.LastMessage.DateCreated)
            .GetInfiniteScrollResult(scroll));
 }