public ActionResult <GetChatResponce> GetMinimumChat(GetMinimumChatRequest req) { GetChatResponce chat = service.GetMinimumChat(req, ClientsUserId); if (chat == null) { return(NotFound()); } return(Ok(chat)); }
public GetChatResponce GetMinimumChat(GetMinimumChatRequest req, string userId) { if (!req.MemberUserIds.Contains(userId)) { return(null); } List <FilterDefinition <Chat> > filters = new List <FilterDefinition <Chat> > { Builders <Chat> .Filter .Size(c => c.Members, req.MemberUserIds.Count()) }; foreach (string id in req.MemberUserIds) { filters.Add( Builders <Chat> .Filter.ElemMatch(c => c.Members, m => m.UserId == id)); } var filter = Builders <Chat> .Filter.And(filters); var projection = Builders <Chat> .Projection .Expression(c => new GetChatResponce { Id = c.Id, Members = c.Members, UpdatedAt = c.UpdatedAt, Messages = c.MessageLists.First().Messages, CreatedAt = c.CreatedAt, MessageListIndex = 0 }); var res = collection .Find(filter) .Project(projection) .FirstOrDefault(); return(res); }