/// <summary>
        /// Возвращает массив с чатами пользователя
        /// </summary>
        /// <param name="userId">ID пользователя</param>
        /// <returns>Массив с объектами Chat в случае успеха</returns>
        public IEnumerable <Chat> GetUserChats(Guid userId)
        {
            _logger.Info($"Получение списка чатов для пользователя {userId}");

            try
            {
                _timer.Restart();

                Helper.CheckUser(userId);

                MessagesRepository messagesRepository = new MessagesRepository();

                var chats = _db.ChatMembers
                            .Include(c => c.Chat)
                            .Where(u => u.UserID == userId)
                            .Select(c => c.Chat)
                            .Include(c => c.Members.Select(u => u.User))
                            .ToArray();

                // Достаем последнее сообщение для каждого чата
                foreach (var c in chats)
                {
                    c.Messages = new List <Message>();

                    var m = messagesRepository.GetLastMessage(c.ID);
                    c.Messages.Add(m ?? new Message());
                }

                var ret = chats.OrderByDescending(t => t.Messages.Min(m => m.Time));

                _logger.Info($"Получение списка чатов для пользователя {userId} - успешно за {_timer.ElapsedMilliseconds} мс");
                if (_timer.ElapsedMilliseconds > MaxTime)
                {
                    _logger.Warn($"Получение списка чатов для пользователя {userId} заняло {_timer.ElapsedMilliseconds} мс");
                }

                return(ret);
            }
            catch (HttpResponseException)
            {
                throw;
            }
            catch (Exception e)
            {
                _logger.Error($"Ошибка при получении списка чатов для пользователя {userId}: {e.Message}");
                throw Helper.GenerateException(e.Message, HttpStatusCode.InternalServerError);
            }
            finally
            {
                _timer.Stop();
            }
        }
        /// <summary>
        /// Возвращает информацию о чате
        /// </summary>
        /// <param name="id">ID чата</param>
        /// <returns>Объект Chat</returns>
        public Chat GetChat(Guid id)
        {
            _logger.Info($"Получение информации о чате {id}");

            try
            {
                _timer.Restart();

                Helper.CheckChat(id);
                var ret = _db.Chats
                          .Include(c => c.Members.Select(cm => cm.User))
                          .First(c => c.ID == id);

                ret.Messages = new List <Message>();

                var m = new MessagesRepository().GetLastMessage(ret.ID);
                if (m != null)
                {
                    ret.Messages.Add(m);
                }

                _logger.Info($"Получение информации о чате {id} - успешно за {_timer.ElapsedMilliseconds} мс");
                if (_timer.ElapsedMilliseconds > MaxTime)
                {
                    _logger.Warn($"Получение информации о чате {id} заняло {_timer.ElapsedMilliseconds} мс");
                }

                return(ret);
            }
            catch (HttpResponseException)
            {
                throw;
            }
            catch (Exception e)
            {
                _logger.Error($"Ошибка при получении информации о чате {id}: {e.Message}");
                throw Helper.GenerateException(e.Message, HttpStatusCode.InternalServerError);
            }
            finally
            {
                _timer.Stop();
            }
        }