OneBitFood V2 – Aula 1

 

 


Aula 1 – Back-end com Ruby on Rails

Planejamento: 00:02:53
Criação do Projeto: 00:15:09
Gerando os models: 00:19:24
Relacionamentos: 00:27:22
Melhorando os models: 00:31:37
Preparando os Controllers: 00:36:15
Incluindo imagens nos models: 00:42:26
Preparando os dados de teste: 00:46:12
Preparando os controllers: 00:55:05
Filtros: 01:18:15
Criando um novo pedido: 01:25:27
Configurando o CORS na API: 01:43:53

0 – Links importantes

 

1 – Planejamento

A ideia inicial

Criar um APP inspirado no Ifood usando Ruby On Rails como API e Next.js como cliente Web

 

O Planejamento

  1. Mockups

    1. Ferramenta: https://www.figma.com

    2. Material: https://drive.google.com/drive/folders/1mqVAQP-96Xa4I8AcdsuFc0v_XJ_elqVx?usp=sharing

  2. Modelo do banco de dados

    1. Ferramenta: DbDesigner

    2. Material: https://dbdesigner.page.link/RvxXdi581QjxiDqe8

  3. Documentação dos endpoints

    1. Ferramenta: https://www.postman.com

    2. Material: https://documenter.getpostman.com/view/10378249/TzRPk9yD

 

Dependências

A seguir, veja as dependências para este projeto

  • Ruby 3.0.1

  • Ruby on Rails 6.0

  • Sqlite

 

Instalação

Caso não tenha as ferramentas instaladas acesse o guia de instalação

 

 

 

2 – Criando o Projeto

Criando o projeto

Nesta etapa você criará e realizará as configurações iniciais do projeto.

  1. Crie o projeto executando o seguinte comando

  2. Entre na pasta do projeto

  3. Adicione as seguintes gems ao seu Gemfile

    • Ransack

      • Para realizar as pesquisas

    • Rack Cors

      • Para conseguirmos chamar nossa API com segurança através do frontend

  4. Instale as gems

Banco de dados

  1. Crie o banco de dados executando o comando

 

 

3 – Gerando os Models

Gerando os Models

Nesta etapa você irá gerar os modelos do projeto.

  1. Crie um model para Categoria dos Restaurantes

  1. Crie o model de Restaurante

  1. Para que os restaurantes possam gerenciar suas categorias de produtos, crie o model ProductCategory

  1. Crie o model Product que representará os produtos oferecidos por um restaurante

  1. Crie o model de Pedidos

  1. Crie um model para gerenciar os Itens de um Pedido

 

 

Migration

  1. Vá até a Migration de criação da tabela Order e adicione um valor padrão para o status de um pedido

  2. Execute as migrations

 

 

4 – Relacionamentos das tabelas

Nesta aula você irá configurar os relacionamentos entre os models do projeto.

1 – A mesma Categoria pode ser de N Restaurantes. Mapeie o relacionamento adicionando ao model category.rb

2 – Um restaurante pode ter N Categorias de Produtos, N Pedidos e N Avaliações Faça o relcionamento estre essas tabelas adicionando ao model restaurant.rb

3 – Uma Categoria de Produto pode ser de N Produtos Mapeie esta relação adicionando ao model product_category.rb

4 – Um Pedido pode ter N Itens do Pedido Faça este relacionamento adicionando ao model order.rb

5 – Um Produto pode estar em N Itens do pedido Mapeie o relacionamento adicionando ao model product.rb

 

 

5 – Melhorando os Models

Nesta aula você irá configurar as validações e o enum para os seus Models.

Validações

  1. Adicione as validações para o model Retaurantes

    app/models/restaurant.rb

  2. Faça as validações no model de Categorias de Restaurante

    app/models/category.rb

  3. Adicione as validações para o model de Pedidos

    app/models/order.rb

  4. Realize validações no model de Itens do Pedido

    app/models/order_product.rb

  5. Faça as validações em Categoria de Produto

    app/models/product_category.rb

  6. Adicione as validações para Produto

    app/models/product.rb

     

Enum

  1. Um Pedido pode estar em andamento ou entregue Para fazer este controle vá ao model Pedido e adicione o seguinte enum

 

 

6 – Gerando os Controllers

Nesta aula você criará os Controllers e Rotas do seu projeto.

Controllers

Abra o terminal, vá até a pasta do projeto e realize as seguintes instruções

  1. Crie o controller Categories com a action index

  2. Crie o controller Restaurants com as actions index, show e search

  3. Crie o controller Orders com as actions create e show

  4. Crie o controller AvailableCities com a action index:

     

Rotas

  1. Vá até o arquivo config/routes.rb e adicione as rotas da sua aplicação

     

 

7 – Imagens

Nesta aula você utilizará o Active Storage para permitir que Categorias, Restaurantes, e Produtos tenham uma imagem de apresentação.

Active Storage

  1. Faça a instalação do Active Storage executando o comando

  2. Configure para que os arquivos sejam salvos localmente no anbiente de desenvolvimento

    config/environments/development.rb

  3. Execute a migration que foi criada

     

Models

Para adicionar a possibilidade de um model possuir uma imagem faça:

  1. Vá até o model de Categorias e inclua o seguinte código

    app/models/category.rb

  2. Faça o mesmo processo para o model de Restaurante

    app/models/restaurant.rb

  3. E por fim, o mesmo para o model de Produtos

     

 

Preparando dados de testes

Nessa aula você incluira os dados que serão usados para teste

  1. Baixe as imagens do seguinte links (https://drive.google.com/file/d/1vKVyrYw8uMvsfU56n7JjftsvDLNSou-M/view?usp=sharing), descompacte a pasta e coloque em /public

  2. No arquivo seeds.rb coloque:

  3. Inclua no banco de dados:

    Obs: Se você tiver algum problema para rodar os seeds de uma única vez, rode rails c e rode parte a parte dos seeds.

 

 

8 – Preparando os controllers

Nesta aula vamos incluir os métodos para devolver os restaurantes e as categorias

  1. Adicione o seguinte código a action index, no controller de Categorias

    app/controllers/categories_controller.rb

  2. Crie o arquivo index.json.jbuilder em /views/categories e coloque nele:

  3. Adicione o seguinte código a action index, no controller Restaurants:

    app/controllers/restaurants_controller.rb

  4. Crie o arquivo index.json.jbuilder em /views/restaurantes e coloque nele:

  5. Crie o arquivo _restaurant.json.jbuilder em /views/restaurantes e coloque nele:

  6. Crie o arquivo _product_category.json.jbuilder em /views/product_categories e coloque nele:

  7. Crie o arquivo _product.json.jbuilder em /views/products e coloque nele:

  8. No Controller app/controllers/restaurants_controller.rb adicione:

  9. Inclua nos métodos privados do controller:

  10. Crie o arquivo show.json.jbuilder em /views/restaurantes e coloque nele:

  11. No Controller app/controllers/available_cities.rb na action index adicione:

  12. Crie a seguinte estrutura:

  13. Coloque no arquivo criado:

     

 

9 – Filtros

Nesta aula você criará os filtros por Categorias, Restaurantes e Cidade

  1. No método index do controller Restaurantes adicione

    app/controllers/restaurants_controller.rb

  2. Agora coloque nos métodos privados:

     

 

10 – Controller Order

Nessa aula você implementará a funcionalidade de Realizar um Pedido

  1. Adicione um callback para salvar o valor total do pedido.

    Vá até o model de Pedido e adicione o seguninte código

    app/models/order.rb

  2. Para permitir que os Itens de um Pedido sejam salvos junto ao Pedido utilize Nested Attributes

    Vá até o model order.rb e adicione a linha a seguir

  3. Agora adicione o seguinte código ao controller de Pedidos

  4. Crie o arquivo _show.json.jbuilder em /views/orders e coloque nele:

  5. Crie o arquivo _order.json.jbuilder em /views/orders e coloque nele:

     

 

11 – Configurando o CORS na API

Nesta aula vamos ajustar a API para que ela permita chamadas vindas do javascript do Browser

  1. Instale a gem rodando:

  2. Agora substitua o conteúdo do arquivo config/initializers/cors.rb por:

     

 

 

 

Feito com s2 por OneBitCode