public void Handle_ChecksReturnType() { //Arrange var iconfMock = new Mock <IConfiguration>().Object; var query = new GetCharactersQuery(); var handle = new GetCharactersQuery.GetCharactersQueryHandler(iconfMock); //ACT var result = handle.Handle(query, CancellationToken.None); //Assert Assert.IsType <Task <CharactersListVM> >(result); }
public async Task <PageResponse <Character> > List(GetCharactersQuery query) { var characters = await _characterRepository.GetAllCharacters() .Select(x => new CharacterDTO(x.Id, x.Name, x.Planet)) .PickPage(query); var episodes = _episodesService.GetAllEpisodes().ToList(); var charactersIds = characters.Results.Select(x => x.Id); var episodeCharactersTask = _episodesService.GetAllEpisodesCharacters(charactersIds); var friendsTasks = Task.FromResult(_characterRepository.GetAllCharactersFriends(charactersIds) .Select(x => new CharacterFriendDTO(x.Id, x.FriendId)) .ToList()); await Task.WhenAll(episodeCharactersTask, friendsTasks); return(characters.ComposeCharacters(episodes, friendsTasks.Result, episodeCharactersTask.Result)); }
public async Task <IReadOnlyList <GetCharacterDto> > Handle(GetCharactersQuery request, CancellationToken cancellationToken) { const string sql = "SELECT c.CharacterId, c.CreatedAt, c.Name, c.Strength, c.Defense, c.Intelligence, " + "e.Name as EpisodeName, e.EpisodeId, f.Name as FriendName, f.CharacterId as FriendId " + "FROM characters c " + "LEFT JOIN characterEpisodes ec ON ec.CharacterId = c.CharacterId " + "LEFT JOIN episodes e ON e.EpisodeId = ec.EpisodeId " + "LEFT JOIN CharacterFriends ef ON ef.CharacterId = c.CharacterId " + "LEFT JOIN Characters f ON f.CharacterId = ef.FriendId " + "ORDER BY c.CreatedAt " + "OFFSET @Offset ROWS " + "FETCH NEXT @PageSize ROWS ONLY"; var connection = _sqlConnectionFactory.GetOpenConnection(); var list = await connection.QueryAsync <GetCharacterDto, DynamicFriendEpisodeDto, GetCharacterDto>( sql, (character, dynamicValue) => { //todo: Map Name, Defense, etc. from GetCharacterDto, not DynamicFriendEpisodeDto character.Name = dynamicValue.Name; character.Intelligence = dynamicValue.Intelligence; character.Strength = dynamicValue.Strength; character.Defense = dynamicValue.Defense; if (dynamicValue.EpisodeId > 0) { character.Episodes.Add(new GetEpisodeDto() { EpisodeId = dynamicValue.EpisodeId, Name = dynamicValue.EpisodeName }); } if (dynamicValue.FriendId > 0) { character.Friends.Add(new GetFriendDto() { CharacterId = dynamicValue.FriendId, FriendName = dynamicValue.FriendName, }); } return(character); }, new { Offset = request.ProductSpecParams.PageIndex, request.ProductSpecParams.PageSize }, splitOn : "Name"); var grouppedList = list.GroupBy(x => x.CharacterId); var lastResult = new List <GetCharacterDto>(); foreach (IGrouping <int, GetCharacterDto> item in grouppedList) { GetCharacterDto characterDto = new GetCharacterDto(); for (int i = 0; i < item.Count(); i++) { var tempCharacterDto = item.ElementAt(i); if (i == 0) { characterDto = tempCharacterDto; continue; } characterDto.Friends.AddRange(tempCharacterDto.Friends); characterDto.Episodes.AddRange(tempCharacterDto.Episodes); } lastResult.Add(characterDto); } return(lastResult.AsList()); }