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