Este projeto consiste em uma API criada em ruby on rails, que fornece e gerência um banco de artistas, álbums e músicas.
- Cada artista pertence a um gênero e possui nenhum ou vários álbums.
- Cada álbum pertence a um artista e a um gênero e possui nenhuma ou várias músicas.
- Cada música pertence a um gênero e possui nenhum ou vários álbums.
- ruby 2.6
- rvm 1.29
- Rails 6.0
- apipie-rails
- database_cleaner
- factory_bot_rails
- faker
- rspec-rails
- shoulda-matchers
- will_paginate
- active_model_serializers
- ransak
Clone o repositório e execute os comandos docker compose build
É necessário ter o sqlite3 instalado no sistema operacional.
Clone o repositório e execute o comando bundle install
Dentro do ambente selecionado, execute o comando rails db:migrate
Dentro do ambente selecionado, execute o comando rails db:seed
. Isto fará com que o banco seja populado com amostras aleatórias, criadas pela biblioteca faker.
- Com docker: Execute o comando
docker compose up
- Sem docker: Execute o comando
rails s
Dentro do ambente selecionado, execute o comando bundle exec rspec
A documentação dos endpoints foi criada com a biblioteca apipie, e pode ser vizualizada acessando http://localhost:3000
OBS: Os parâmetros enviados para os endpoints POST e PUT devem estar no formato json, no body da requisição. Exceto pelo parâmetro id, que fará parte da uri da requisição.
OBS 2: Os parâmentros enviados para os endpoints GET precisam usar matchers.
Ex:
Listar todos os artitas cujo nome contém a string "John": GET http://localhost:3000/api/v1?name_cont=John
curl -i -H "Accept: application/json" -X GET http://localhost:3000/api/v1/albums
curl -i -H "Accept: application/json" -X GET http://localhost:3000/api/v1/albums?genre_id=1
curl -i -H "Accept: application/json" -X GET http://localhost:3000/api/v1/albums/1
curl -H "Content-Type: application/json" \ --request POST \ --data '{"title":"Novo álbum","artist_id":1,"genre_id":1,"add_musics":[1,2,3]}' \ http://localhost:3000/api/v1/albums
curl -H "Content-Type: application/json" \ --request PUT \ --data '{"title":"Novo título do álbum"}' \ http://localhost:3000/api/v1/albums/1
curl -H "Content-Type: application/json" \ --request PUT \ --data '{"add_musics":[1,2,3]}' \ http://localhost:3000/api/v1/albums/1
curl -H "Content-Type: application/json" \ --request PUT \ --data '{"remove_musics":[1,2,3]}' \ http://localhost:3000/api/v1/albums/1
curl -i -H "Accept: application/json" -X DELETE http://localhost:3000/api/v1/albums/1
Dentro do diretório do projeto, execute o comando bundle exec rspec