public Task <RollListDto <Message> > GetMessagesOfLobbyAsync(Guid lobbyId, Guid?oldestId, int requestedCount) { var lobby = lobbyStorage.GetLobby(lobbyId); if (!lobby.Contains(identityService.GetCurrentUserName())) { throw new UnauthorizedAccessException("Not authorized to read the messages of this lobby."); } List <Message>?results = null; if (oldestId.HasValue) { var oldest = lobbyStorage.GetMessages(lobbyId).Single(x => x.Id == oldestId); results = lobbyStorage.GetMessages(lobbyId) .Where(x => x.Timestamp < oldest.Timestamp) .OrderByDescending(x => x.Timestamp) .Take(requestedCount) .OrderBy(x => x.Timestamp) .ToList(); } else { results = lobbyStorage.GetMessages(lobbyId) .OrderByDescending(x => x.Timestamp) .Take(requestedCount) .OrderBy(x => x.Timestamp) .ToList(); } var hasMore = results.Count == requestedCount && lobbyStorage.GetMessages(lobbyId) .Any(x => x.Timestamp < results.First().Timestamp); return(Task.FromResult(new RollListDto <Message> { HasMoreLeft = hasMore, Data = results })); }
public Task <List <Message> > GetMessages(Guid lobbyId) { return(Task.FromResult(lobbyStorage.GetMessages(lobbyId))); }