Skip to content

Latest commit

 

History

History
231 lines (134 loc) · 10.8 KB

01-conhecendo-o-projeto.md

File metadata and controls

231 lines (134 loc) · 10.8 KB

Conhecendo o Caelum Eats

Peça sua comida com o Caelum Eats

Usaremos como projeto de exemplo o Caelum Eats: uma aplicação de entrega de comida nos moldes de soluções conhecidas no mercado.

Há 3 perfis de usuário:

  • o cliente, que efetua um pedido.
  • o dono do restaurante, que mantém os dados do restaurante e muda os status de pedidos pendentes.
  • o administrador do Caelum Eats, que mantém os dados básicos do sistema e aprova novos restaurantes.

Funcionalidades

Cliente

O intuito do cliente é efetuar um pedido, que é um processo de várias etapas. No Caelum Eats, o cliente não precisa fazer login.

Ao acessar a página principal do Caelum Eats, o cliente deve digitar o seu CEP.

Cliente digita o CEP {w=62}

Depois de digitado o CEP, o Caelum Eats retorna uma lista com os restaurantes mais próximos. Entre as informações mostradas em cada item da lista, está a distância do restaurante ao CEP.

O cliente pode filtrar por tipo de cozinha, se desejar. Então, deve escolher algum restaurante.

Os dados iniciais do Caelum Eats vêm apenas com um restaurante: o Long Fu, de comida chinesa.

Observação: a implementação não calcula de fato a distância do CEP aos restaurantes. O valor exibido é apenas um número randômico.

Cliente vê os restaurantes mais próximos {w=60}

Depois de escolhido um restaurante, o cliente vê o cardápio.

Também são exibidas outras informações do restaurante, como a média das avaliações, a descrição, os tempos de espera mínimo e máximo e a distância do CEP digitado pelo cliente.

Há também uma aba de avaliações, em que o cliente pode ver as notas e comentários de pedidos anteriores.

Cliente vê cardápio do restaurante escolhido {w=60}

Ao escolher um item do cardápio, o cliente deve escolher uma quantidade. É possível fazer observações de preparo.

Cliente escolhe um item do cardápio {w=63}

A cada item do cardápio escolhido, o resumo do pedido é atualizado.

Cliente vê resumo do pedido {w=27}

Ao clicar no botão "Fazer Pedido", o cliente deve digitar os seus dados pessoais (nome, CPF, email e telefone) e os dados de entrega (CEP, endereço e complemento).

Cliente digita dados pessoais e de entrega {w=65}

Então, o cliente informa os dados de pagamento. Por enquanto, o Caelum Eats só aceita cartões.

Cliente informa dados de pagamento {w=66}

No próximo passo, o cliente pode confirmar ou cancelar o pagamento criado no anteriormente.

Cliente confirma ou cancela o pagamento {w=47}

Se o pagamento for confirmado, o pedido será realizado e aparecerá como pedido pendente no restaurante!

Então, o cliente pode acompanhar a situação de seu pedido. Para ver se houve alguma mudança, a página deve ser recarregada.

Cliente acompanha o status do pedido {w=40}

Quando o restaurante avisar o Caelum Eats que o pedido foi entregue, o cliente poderá deixar sua avaliação com comentários. A nota da avaliação influenciará na média do restaurante.

Cliente avalia o pedido {w=43}

Dono do restaurante

O dono de um restaurante deve efetuar o login para manipular as informações de seu restaurante.

As informações de login do restaurante pré-cadastrado, o Long Fu, são as seguintes:

  • usuário: longfu
  • senha: 123456

Dono do restaurante efetua login {w=66}

Depois do login efetuado, o dono do restaurante terá acesso ao menu.

Dono do restaurante vê menu {w=25}

Uma das funcionalidades permite que o dono do restaurante atualize o cadastro, manipulando informações do restaurante como o nome, CPNJ, CEP, endereço, tipo de cozinha, taxa de entrega e tempos mínimo e máximo de entrega.

Além disso, o dono do restaurante pode escolher quais formas de pagamento são aceitas, o horário de funcionamento e cadastrar o cardápio do restaurante.

Dono do restaurante atualiza o cadastro {w=67}

O dono do restaurante também pode acessar os pedidos pendentes, que ainda não foram entregues. Cada mudança na situação dos pedidos pode ser informada por meio dessa tela.

Dono do restaurante vê os pedidos pendentes {w=35}

O dono de um novo restaurante, que ainda não faz parte do Caelum Eats, pode registrar-se clicando em "Cadastre seu Restaurante". Depois de cadastrar um usuário e a respectiva senha, poderá preencher as informações do novo restaurante.

O novo restaurante ainda não aparecerá para os usuários. É necessária a aprovação do restaurante pelo administrador do Caelum Eats.

Dono de um novo restaurante se registra {w=69}

Administrador

O administrador do Caelum Eats só terá acesso às suas funcionalidades depois de efetuar o login.

Há um administrador pré-cadastrado, com as seguintes credenciais:

  • usuário: admin
  • senha: 123456

Não há uma tela de cadastro de novos administradores. Por enquanto, isso deve ser efetuado diretamente no Banco de Dados. Esse cadastro é uma das funcionalidades pendentes!

Administrador efetua login {w=62}

Depois do login efetuado, o administrador verá o menu.

Administrador vê menu {w=34}

Somente o administrador, depois de logado, pode manter o cadastro dos tipos de cozinha disponíveis no Caelum Eats.

Administrador cadastra tipos de cozinha {w=59}

Outra funcionalidade disponível apenas do administrador é o cadastro das formas de pagamento que podem ser escolhidas no cadastro de restaurantes.

Administrador cadastra formas de pagamento {w=65}

Também é tarefa do administrador do Caelum Eats revisar o cadastro de novos restaurantes e aprová-los.

Administrador aprova novo restaurante {w=60}

A Arquitetura do Caelum Eats

Arquitetura do Caelum Eats {w=25}

Back-end

O back-end do Caelum Eats provê uma API REST. A porta usada é a 8080.

O Banco de Dados utilizado é o MySQL, na versão 5.7 e executado na porta 3307.

É implementado com as seguintes tecnologias:

  • Spring Boot
  • Spring Boot Web
  • Spring Boot Validation
  • Spring Data JPA
  • MySQL Connector/J
  • Flyway DB, para migrations
  • Lombok, para um Java menos verboso
  • Spring Security
  • jjwt, para gerar e validar tokens JWT
  • Spring Boot Actuator

As migrations do Flyway DB, que ficam no diretório src/main/resources/db/migration, além de criar a estrutura das tabelas, já popula o BD com dados iniciais.

Front-end

O front-end do Caelum Eats é uma SPA (Single Page Application), implementada em Angular 7. A porta usada em desenvolvimento é a 4200.

Para a folha de estilos, é utilizado o Bootstrap 4.

São utilizados alguns componentes open-source:

  • ngx-toastr
  • angular2-text-mask
  • ng-bootstrap

Exercício: Executando o back-end

  1. Clone o projeto do back-end para seu Desktop com os seguintes comandos:
cd ~/Desktop
git clone https://gitlab.com/aovs/projetos-cursos/fj33-eats-monolito.git
  1. O MySQL será executado pelo Docker Compose. Para isso, baixe e execute o docker-compose.yml para o seu Desktop com os seguintes comandos:
cd ~/Desktop/
curl https://gitlab.com/snippets/1954188/raw > docker-compose.yml
docker-compose up -d
  1. Abra o Eclipse, definindo como workspace /home/<SEU-USUARIO>/workspace-monolito. Troque <SEU-USUARIO> pelo seu login.
  2. No Eclipse, acesse File > Import > Existing Maven Projects e clique em Next. Em Root Directory, aponte para o diretório clonado anteriormente.
  3. Acesse a classe EatsApplication e a execute com CTRL+F11. O banco de dados será criado automaticamente e alguns dados serão populados.
  4. Teste a URL http://localhost:8080/restaurantes/1 pelo navegador e verifique se um JSON com os dados de um restaurante foi retornado.
  5. Analise o código. Veja:
  • as entidades de negócio
  • os recursos e suas respectivas URIs
  • os serviços e suas funcionalidades.

Exercício: Executando o front-end

  1. Em um terminal, baixe para o Desktop o projeto do front-end, usando o Git, com os comandos:
cd ~/Desktop
git clone https://gitlab.com/aovs/projetos-cursos/fj33-eats-ui.git
  1. Na pasta do front-end do projeto, instale as dependências com o comando:
cd ~/Desktop/fj33-eats-ui
npm install
  1. Execute a aplicação com o comando:
ng serve
  1. Abra um navegador e teste a URL: http://localhost:4200. Explore o projeto, fazendo um pedido, confirmando um pedido efetuado, cadastrando um novo restaurante e aprovando-o. Em caso de dúvidas, peça ajuda ao instrutor.

Um negócio em expansão

No Caelum Eats, a entrega é por conta do restaurantes. Porém, está no road map do produto ter entregas por meio de terceiros, como motoboys, ou por funcionários do próprio Caelum Eats.

Atualmente, só são aceitos cartões de débito, crédito e vale refeição. Entre as ideias estão aceitar o pagamento em dinheiro e em formas de pagamentos inovadoras como criptomoedas, soluções de pagamento online como Google Pay e Apple Pay e pagamento com QR Code.

Entre especialistas de negócio, desenvolvedores e operações, a equipe passou a ter algumas dezenas de pessoas, o que complica incrivelmente a comunicação.

Os desenvolvedores passaram a reclamar do código, dizendo que é difícil de entender e encontrar onde devem ser implementadas manutenções, correções e novas funcionalidades.

Há ainda problemas de performance, especialmente no cálculo dos restaurantes mais próximos ao CEP informado por um cliente. Essa degradação da performance acaba afetando todas as outras partes da aplicação.

Será que esses problemas impedirão a Caelum Eats de expandir os negócios?