O FoodExplorer é uma aplicação fullstack, utilizando as tecnologias aprendidas durante o curso Explorer, simulando um restaurante fictício de acordo com o layout disponibilizado no Figma.
O food explorer possui duas personas: o admin e o usuário;
O admin é a pessoa responsável pelo restaurante e tem o acesso para criar, visualizar, editar, apagar um prato e alterar os status de pedidos a qualquer momento. Cada prato deve conter uma imagem, nome, categoria, descrição, ingredientes e o seu preço. Ao clicar em adicionar ou editar prato será redirecionado para a página e ao finalizar receberá uma mensagem de sucesso e será redirecionado para a página principal.
O usuário irá visualizar todos os pratos cadastrados, adicionar ao carrinho, fazer um pedido, adicionar aos favoritos, acompanhar seu histórico de pedidos, atualizar seu perfil e quando clicar em um prato, será redirecionado para uma nova tela com informações mais detalhadas sobre ele.
Link para o deploy da aplicação
Link para o Front-End
Antes de começar, você vai precisar ter instalado em sua máquina NodeJs , uma ferramenta de versionamento como o GIT . Além disto é recomendado um editor de código, por exemplo oVSCode . Para fazer testes localmente uma boa opção é o Insomnia e para gerenciamento de banco de dados relacional o Beekeeper .
Siga os seguintes passos para configurar e rodar a aplicação localmente:
-
Clone o repositório:
git clone https://github.com/Neves-Rafael/FoodExplorer-BackEnd
-
Entre no diretório e instale as dependências:
npm install
-
Preencha as variáveis seguindo o .env.exemplo:
ADMIN_EMAIL=admin@admin.com PORT=3333 AUTH_SECRET=a76da876da876$ds654a@7656
-
Rode o servidor local:
npm run dev
-
Caso não ocorra nenhum erro a seguinte mensagem será apresentada:
Server is running on port 3333.
-
Para utilizar todo dos recursos desta API, acesse o localhost com a porta adicionada no .env:
http://localhost:3333
-
Para fazer as requisições utilize o insomnia ou qualquer outro programa de sua preferência.
A aplicação possui duas personas:
-
Cliente:
- Mostrar todos os pratos
- Mostrar um prato especifico
- Pesquisar por um prato ou ingrediente
- Adicionar ao carrinho os pedidos
- Fazer um pedido
- Adicionar prato aos favoritos
- Acessar todos os favoritos
- Acessar histórico de pedidos
- Acessar status do pedido
- Atualizar informações da conta
- Acessar página com informações sobre o restaurante
-
Administrador:
- Mostrar todos os pratos
- Mostrar um prato especifico
- Pesquisar por um prato ou ingrediente
- Acessar todos os pedidos
- Acessar status do pedido
- Atualizar status de pedidos
- Atualizar informações da conta
- Acessar página com informações sobre o restaurante
- Cadastrar um novo prato
- Atualizar um prato
- Deletar um prato
- Atualizar um pedido
-
Para algumas requisições, a aplicação espera um token (JWT) no header da requisição, ou seja, o usuário tem que está autenticado.
Para gerar um token basta fazer uma requisição:
POST("/sessions")
Com as seguintes informações:
"email": "exemplo@email.com", "password": "exemplo123"
Se tudo estiver correto será liberado acesso para a aplicação.
-
Rota para criação de conta, por padrão é atribuído acesso de
usuário
, para ter acesso a uma conta de administrador adicione ao arquivo.env
no campo deADMIN_EMAIL
o email desejado para ser atribuído comoAdministrador
.POST("/users")
ADMIN_EMAIL=admin@admin.com PORT=3333 AUTH_SECRET=a76da876da876$ds654a@7656
Com as seguintes informações:
"nome": "Exemplo nome" "email": "exemplo@email.com", "password": "exemplo123"
Rota para atualização da conta
PUT("/users")
Rota para uma segunda autorização que verificar se a conta foi criada corretamente.
GET("/users/validated")
-
As seguintes rotas são para visualização de todos os pratos ou pratos específicos selecionados.
GET("/plates")
GET("/plates/:id")
Para o admin ele possui as seguintes rotas de criação, exclusão e atualização dos pratos.
POST("/plates")
admin require
PUT("/plates/:id")
admin require
DELETE("/plates/:id")
admin require
PATCH("/plates/:id")
admin require
-
Rota para a criação de um pedido, com uma duração de 15 minutos para pagamento, que é ativado com a rota seguinte.
POST("/payment")
Pota para um fazer um "pagamento" fictício que atualiza o status do pedido.
PUT("/payment/qrcode/:id")
As seguintes rotas são para visualização de todos os pedidos daquele usuário e para pedidos específicos.
GET("/payment")
GET("/payment/:id")
Rota que o admin consegue atualizar o status de qualquer pedido existente.
PATCH("/payment/:id")
admin require
-
Rota para exibir os ingredients.
GET("/ingredients")
-
Rotas para adição do prato aos favoritos e para visualização de todos os pratos adicionados.
POST("/favorites")
GET("/favorites")
- ✅ Projeto estruturado, com uma boa organização das pastas.
- ✅ Os dados do admin, do restaurante e dos usuários serão armazenados em um banco de dados.
- ✅ Os usuários se autenticam para entrar na aplicação através da tela de login, utilizando autenticação JWT.
- ✅ Usuário e admin podem fazer uma busca tanto pelo nome do prato quanto pelos ingredientes;
- ✅ O admin pode fazer upload de imagens para cadastrar os pratos.
- ✅ Aplicação consome a sua própria API.
- NodeJs - bcryptjs - express - knex - Multer - SQLite - PM2 - JWT
Uso de Licença MIT: Essa licença permite o uso, modificação e distribuição do software sem restrições.
Feito com ❤️ por Rafael Neves 👋🏽 Entre em Contato