示例#1
0
        public async Task <ChatPage> Get(GetChatsList request)
        {
            var session = Request.ThrowIfUnauthorized();
            var uid     = session.UserAuthId;
            var chats   = await RavenSession.Query <Chat>()
                          .Where(chat => chat.Members.Any(member => member.UserId == uid))
                          .ToListAsync();

            return(new ChatPage
            {
                Chats = chats.Select(e => Mapper.Map <ChatMold>(e)).ToList()
            });
        }
示例#2
0
        /// <summary>
        /// Получить список чатов
        /// </summary>
        /// <returns></returns>
        public async Task <GetListResult <ChatSimpleModel> > GetChats(GetChatsList model)
        {
            if (!model.Count.HasValue)
            {
                model.Count = 50;
            }

            var chatRels = await GetChatVisits(model.Filter);

            var initChatQuery = Query <EccChat>()
                                .Where(x => x.UserRelations.Any(t => t.UserId == UserId))
                                .Where(x => x.IsSystem == model.Filter.IsSystem && x.IsDialog == model.Filter.IsDialog);

            if (!string.IsNullOrWhiteSpace(model.Filter.Type))
            {
                initChatQuery = initChatQuery.Where(x => x.Type == model.Filter.Type);
            }

            var query = initChatQuery
                        .Select(x => new ChatSimpleModel
            {
                Id          = x.Id,
                ChatName    = x.ChatName,
                ChatType    = x.Type,
                IsDialog    = x.IsDialog,
                LastMessage = x.Messages.OrderByDescending(t => t.SentOnUtcTicks).Select(t => new ChatMessageModel
                {
                    Id                 = t.Id,
                    SenderUserId       = t.SenderUserId,
                    SentOnUtcTicks     = t.SentOnUtcTicks,
                    Message            = t.Message,
                    LastUpdateUtcTicks = t.LastUpdateOnUtcTicks,
                    TagString          = t.TagString,
                }).FirstOrDefault()
            }).OrderByDescending(x => x.LastMessage.SentOnUtcTicks);

            var preResult = await query
                            .Skip(model.OffSet)
                            .Take(model.Count.Value)
                            .ToListAsync();

            var q = from chat in preResult
                    join chatRel in chatRels on chat.Id equals chatRel.ChatId
                    select new
            {
                Chat = chat,
                chatRel.CountOfUnread
            };

            var list = q.Select(x =>
            {
                x.Chat.CountOfUnreadMessages = x.CountOfUnread;
                return(x.Chat);
            }).ToList();

            return(new GetListResult <ChatSimpleModel>
            {
                List = list,
                Count = model.Count,
                OffSet = 0,
                TotalCount = await query.CountAsync()
            });
        }