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