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() }); }
/// <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() }); }