Skip to content
Miguel Gamboa edited this page Nov 27, 2020 · 12 revisions

Implementar function inspect(obj):

  • Escreve na console os pares nome valor de propriedades de obj:nome-prop = valor
  • Se a propriedade for um método (função) apresenta o resultado da chamada à função.
    • só para métodos sem parametros. Os métodos com parametros são ignorados.

=> Colocar a resolução num repositório Github e adicionar fmcarvalho

Implementar uma função que recebe um array de URLs e devolve a soma dos tamanhos dos corpos das respostas HTTP a esses URLs.

function sumBodiesLength()

Requisitos:

  • Tirar partido da função anterior bodyLength (assíncrona) que pode ser modificada.
  • Não usar variáveis globais.
  • Resultados deixam de ser dados pelas funções em console.log(), excepto na aplicação final.

Implementar as funções:

  • módulo users - function addUser(username, cb) - Grava no ficheiro um novo objecto User com com o username dado. Nao aceita repetições e dá erro caso já exista um User com o mesmo username.
  • módulo users - function addArtist(username, artist, cb) - Grava e adiciona o artist ao array artists do objecto User com o username dado. Aceita repetições de artistas.
  • módulo lastfm - function searchArtist(artist, cb) - Pesquisa na Last.fm API se existe um artista com o nome dado.

De seguida implemente a próxima funcionalidade do serviço vinyl que tira partido das operações anteriores de lastfm e users:

  • módulo vinyl - function addArtist(username, artist, cb) - Devolve erro caso não exista um utilizador com o username dado ou não exista um artista com o nome dado no parâmetro artist. Caso contrário, chama addArtist de users.

Adicionar testes unitários para todas as funcionalidades implementadas no TPC06 assegurando 99% de cobertura. Deve utilizar mocks e garantir que os testes são idempotentes, assegurando que podem ser executados com sucesso repetidamente.

Incluir na resposta de routes-vinyl getUsers os links para obtenção dos detalhes e top tracks de cada utilizador.

Implement Vinyl Web App including routes for all operations of TPC 06. Also, develop integration tests to validate Vinyl routes.

  1. Notice that in addBook(id, pgid, cb) the HTTP requests to get a bundle and get a book from the bundles and books indexes are made sequentially. Yet, those operations could run concurrently instead. Modify this implementation such that HTTP requests are performed concurrently.
  2. Notice that previous issue also applies to function addArtist(username, artist, cb) of vinyl module. In this case getting the user profile and getting artist from Last.fm can be performed concurrently. DRY (Don't repeat yourself). Implement an auxiliary function that can run tasks concurrently. This function is parallel(tasks, callback):
    • "Run the tasks array of functions in parallel. If any of the functions pass an error to its callback, the main callback is immediately called with the value of the error. Once the tasks have completed, the results are passed to the final callback as an array."
  3. Use previous function parallel in methods addBook and addArtist to perform requests concurrently.
Clone this wiki locally