Skip to content

alexBonadei/test_rails

 
 

Repository files navigation

README

Setup:

bundle install
yarn install

rails db:create db:migrate
rails db:seed

Per avviare il server:

rails server
bin/webpack-dev-server

Per avviare i test:

rails db:create RAILS_ENV=test
rails db:migrate RAILS_ENV=test
bundle exec rspec

Compiti:

a) L'api corrente /api/posts ha un problema di performance molto comune. Qual è? Come si potrebbe risolvere?

Il problema che ho notato nell'API è l'elevato numero di chiamate al db. Il problema nasce dal fatto che viene fatta una chiamata alla collezione posts. Ogni elemento contiene un array di tags per la quale deve essere fatto il join/lookup per risolvere il nome. Questa lookup viene fatta ciclando sull'array di posts. Perciò, ponendo come N il numero di post, vengono fatte N + 1 chiamate al db (N + 1 Queries Problem).

Questa operazione può essere svolta facendo solamente 2 query al db. La prima fa il fetch dei posts e la seconda fa il fetch dei tags. La lookup poi potrebbe essere risolta manualmente inserendo i tags in una mappa e ciclando sui post con complessità O(n) e 2 chiamate al db.

Non sono pratico di ruby on rails ma cercando qua e là (https://guides.rubyonrails.org/active_record_querying.html#includes) ho scoperto che il framework permette di fare questa operazione con una sintassi molto pulita, senza dover modificare la restante parte del codice:

@posts = Post.includes(:tags).all

b) Implementare una nuova API nel PostsController che, ricevendo in GET un parametro "term" permetta di cercare per nome e per tag i post.

Ad esempio, cercando "gatto", verrà trovato un post che contiene la parola gatto o che ha almeno un tag che si chiama "gatto".

Per l'implementazione, utilizzare l'approccio "TDD". Per farla semplice, implementa semplicemente un test nella cartella spec/requests similare a quello già fatto per l'index

c) Implementare in Vue un'input form, modificando il componente app.vue, che permetta di filtrare i post utilizzando l'API creata precedentemente.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 74.8%
  • JavaScript 11.1%
  • HTML 9.0%
  • Vue 3.3%
  • CSS 1.2%
  • CoffeeScript 0.3%
  • SCSS 0.3%