Aula 1: Back-end com Ruby On Rails – SpotCode | OneBitCode

 

Aula 1: Back-end com Ruby On Rails – SpotCode | OneBitCode

• Planejamento – 00:02:39
• Criando o Projeto – 00:08:51
• Configurando o Devise – 00:15:25
• Gerando os Models – 00:20:41
• Preparando os Seeds – 00:32:16
• Criando o Endpoint de Discovery – 00:40:49
• Criando os Endpoints de Buscas – 01:01:40
• Criando os Endpoints de Categorias – 01:12:14
• Criando os Endpoints de Álbuns – 01:20:30
• Criando os Endpoints de Favoritos – 01:31:57

 


Preparando seu ambiente

Para conseguir executar com perfeição cada passo dado nesta série você precisa de alguns softwares instalados na sua máquina, eu recomendo que você siga este tutorial completo do GoRails para realizar a instalação deles: https://gorails.com/setup

  1. Escolha seu sistema operacional
  2. Instale as seguintes dependências apresentadas lá:
    • Ruby
    • Ruby On Rails
    • Git
    • NodeJs
    • Yarn

 

Obs: Não é necessário instalar o PostgreSQL nem o MySQL
Obs2: Caso você tenha algum problema por não possuir o SQLite3 basta instalar seguindo: https://www.servermania.com/kb/articles/install-sqlite

 


 

Criando o Projeto

 

1. Instale a versão 6 do Rails

2. Crie o app

3. Crie o controller Home

4. Deixe o arquivo de rotas (_config/routes.rb_) com o seguinte conteúdo

Estamos criando uma rota raiz para a action index do controller Home

5. Agora vamos iniciar o servidor

6. E ir ao browser testar nossa rota raiz

Abrir o Browser e testar a URL localhost:3000

 


Configurando o Devise

 

1. Adicione no Gemfile

2. Instale as gems com o comando

3. Vamos agora gerar os arquivos de configuração do Devise

4. Vamos gerar o model que terá a autenticação rodando

5. Execute as migrations

6. Adicione o Hook do Devise em HomeController

7. Vamos iniciar o servidor e testar com o Postman

Tentar acessar a página Home, que deve retornar erro
Cadastrar um usuário com a rota de SignUp

 


Gerando os Models

 

1. Execute o seguinte comando para instalar o Active Storage

Falar sobre os services que são configurados no config/storage.yml e como ele são escolhidos nas configurações de ambiente (config/enviroments)

2. Execute os seguintes comandos para gerar os outros models

3. Na migration de songs (_db/migrate/\_create_songs.rb), faça o seguinte:

Substitua a linha:

Por:

4. Rode as migration com o comando

5. O model Album (_app/models/album.rb_) deve ficar com o seguinte conteúdo

6. O model Artist (_app/models/artist.rb_) deve ficar com o seguinte conteúdo

7. O model Category (_app/models/category.rb_) deve ficar com o conteúdo

8. O model Song (_app/models/song.rb_) deve ficar com o conteúdo

9. Também vamos adicionar o campo para o nome do usuário

10. E o model User (_app/models/user.rb_) deve ficar com o conteúdo

 


Preparando os Seeds

 

1. Baixe este pacote de arquivos contendo as músicas e as imagens utilizadas no app

Clique aqui para o Download

2. Após baixa, coloque dentro da pasta _tmp_ como nome _seed_files_. Ou seja, o caminho da pasta contendo os arquivos ficará _tmp/seeds_files_

3. Acrescente o seguinte conteúdo em _db/seeds.rb_

4. Agora execute o comando para rodar os seeds

 


Criando o Endpoint de Discovery

 

1. Vamos criar o controller para o dashboard

Perceba que ele criou na estrutura e pastas api/v1 junto com os módulos de cada um

2. Para este controller, vamos criar uma action index para carregar as músicas. Adicione em app/controllers/api/v1/dashboard_controller.rb

Estamos carregando para o dashboard os álbuns ouvidos recentemente e as recomendações com base nas últimas categorias que o usuário ouviu

3. Com o controller criado, podemos adicionar as rotas. Adicione em config/routes.rb

Rotas foram adicionadas com o namespace api e v1 para que possamos isolar num contexto à parte rotas HTML

4. Para fazer a renderização JSON, utilizaremos o JBuilder. Para isso, vamos criar um arquivo de view com a extensão dele

Crie um arquivo app/views/api/v1/dashboard/index.json.jbuilder

5. Acrescente o seguinte conteúdo em app/views/api/v1/dashboard/index.json.jbuilder

6. Testar o endpoint

 


Criando os Endpoints de Buscas

 

1. Primeiro vamos analisar a página de busca em si. Ela precisará da lista de categorias. Então vamos começar a criar um endpoint proprio para isso. Digite no terminal

2. Acrescente o seguinte código em app/controllers/api/v1/categories_controller.rb

3. Para renderizar o JSON deste enpoint vamos criar o arquivo do JBuilder

Crie um arquivo app/views/api/v1/categories/index.json.jbuilder

4. Acrescente o seguinte conteúdo em app/views/api/v1/categories/index.json.jbuilder

5. Para a busca, vamos criar um controller específico para ela. Digite no terminal

6. Acrescente o seguinte em app/controllers/api/v1/search_controller.rb

7. Para renderizar o JSON deste enpoint de busca vamos criar o arquivo do JBuilder

Crie um arquivo app/views/api/v1/search/index.json.jbuilder

8. Acrescente o seguinte conteúdo em app/views/api/v1/search/index.json.jbuilder

9. E por último, vamos acrescentar as rotas para listar as categorias e fazer a busca. Acrescente em config/routes.rb

 


 

Criando os Endpoints de Categorias

 

1. Vamos começar adicionando alguns método no model Category. Adicione em app/models/category.rb

Estamos adicionando dois método para retornar os artistas e as músicas de um determinada categoria.

2. Com o métodos em categoria, podemos adicionar uma action show no controller de categorias. Adicione em app/controllers/api/v1/categories_controller.rb

Estamos apenas buscando uma categoria por ID

3. Para retornar um objeto JSON que precisamos com o resultado, vamos criar um JBuilder para isso

Crie um arquivo app/views/api/v1/categories/show.json.jbuilder

4. Adicione o seguinte em app/views/api/v1/categories/show.json.jbuilder

5. Por último, vamos acrescentar rota para detalhar uma categoria. Em config/routes.rb:

Substitua:

Por:

 


Criando os Endpoints de Álbuns

 

1. Vamos começar criando um controller para o Álbum

2. Acrescente em app/controllers/api/v1/albums

3. Para renderizar os detalhes, vamos criar uma view JBuilder para isso

Crie uma view app/views/api/v1/albums/show.json.jbuilder

4. Adicione em app/views/api/v1/albums/show.json.jbuilder

5. Para o álbum tocado recentemente, criaremos um controller para que isso seja feito. Digite no terminal

6. Crie um action :create em app/controllers/api/v1/recently_heads_controller.rb

7. Para que o POST não falhe numa requisição JSON, acrescente o seguinte em ApplicationController

8. E para finalizar, vamos acrescentas as rotas para estas duas actions que criamos. Acrescente em config/routes.rb

 


Criando os Endpoints de Favoritos

 

1. Vamos começar criando o controller para os favoritos. Digite no terminal

2. Nos favoritos, vamos criar as actions para listar, adicionar e remover. Adicione em app/controllers/api/v1/favorites_controller.rb

Perceba que estamos utilizando bastante os recursos que a entidade polimórfica do Rails já nos traz. Na busca, estamos buscando tanto os Albuns, Música e Artistas favoritas utilizando como filtro o campo favoritable_type.
Para adicionar e remover não faremos direrente. Como queremos utilizar uma rota aninhada para favoritar, utilizamos tanto o id da entidade com a qual será aninhada quanto o favoritable_type que colocaremos como parâmetro fixo.

3. Agora nas rotas, utilizaremos um recurso chamado concern onde podemos criar um grupo de rotas que queremos aplicar em diversos contextos. Para isso, acrescente o seguinte com config/routes.rb

4. Para podermos utilizar este recurso, faremos o seguinte também nas rotas. Acrescente em config/routes.rb

Aquele concern que criamos anteriormente, estamos aninhando com uma rota songs. Ou seja, ela ficará como POST api/v1/songs/:id/favorite e DELETE api/v1/songs/:id/favorite e estas duas rotas receberão um parâmetro favoritable_type que terá o valor Song
Com isso temos as rotas para favoritar e desfavoritar uma música

5. Agora precisamos de mais uma rota que é para listar os favoritos, já que temos esta action lá no controller. Adicione em config/routes.rb

6. E por último, vamos criar a view JSON

Crie um arquivo app/views/api/v1/favorites/index.json.jbuilder

7. Acrescente em app/views/api/v1/favorites/index.json.jbuilder