/fast-food-api

O sistema desenvolvido para o controle de pedidos para uma lanchonete de fast food em expansão, visando otimizar o atendimento ao cliente, desde pedidos personalizados até gestão de estoque e pagamentos, promovendo eficiência operacional e satisfação dos clientes.

Primary LanguageC#

Sobre o restaurente

Ctrl+Eat é mais do que uma simples restaurente fast food; é uma experiência gastronômica em constante evolução. Localizada no coração do bairro (e agora em grande expansão!), nosso restaurante combina o sabor autêntico dos clássicos do fast food com a inovação da tecnologia de autoatendimento. Aqui, os clientes podem personalizar seus pedidos, escolhendo entre uma variedade de ingredientes frescos e molhos exclusivos. Nossa equipe dedicada garante que cada pedido seja preparado com perfeição. Além disso, oferecemos um ambiente moderno e acolhedor, onde os clientes podem relaxar e desfrutar de suas refeições. Com o sistema construído exclusivamente para a Ctrl+Eat, prometemos uma experiência deliciosa, rápida e personalizada para todos os amantes de fast food. Venha saborear o futuro da alimentação rápida!

Conteúdo

Containers

Este projeto utiliza o Docker para executar os serviços necessários para a aplicação funcionar corretamente. Para facilitar a execução, foi criado um arquivo docker-compose.yml que contém todos os serviços necessários.

Ao executar o comando para inicializar os containers, o Docker irá baixar as imagens necessárias e executar os seguintes containers:

  • PostgreSQL (16.0)
  • pgAdmin (7.8)
  • Web API (.NET 7)

Dependências

Para executar esta aplicação são necessárias as seguintes dependências:

WSL2

Sugiro utilizar o WSL2 para executar esta aplicação.

Docker

Primeiro, atualize as dependências do sistema:

sudo apt update && sudo apt upgrade

Remova as versões antigas:

sudo apt remove docker docker-engine docker.io containerd runc

Instale os pré-requisitos do Docker:

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Adicione o repositório do Docker nos sources do Ubuntu:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instale o Docker:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Dê as permissões para rodar o Docker com o usuário atual:

sudo usermod -aG docker $USER

Execute o Docker:

sudo service docker start

Makefile

Instale o Makefile:

sudo apt install make

JQ

Instale o JQ:

sudo apt install jq

Uma vez com todas as dependências instaladas, podemos prosseguir!

Manifestos Kubernetes

Este projeto utiliza o Kubernetes para executar os serviços necessários para a aplicação funcionar corretamente. Para facilitar a execução, foi criado uma pasta infra que contém todos os manifestos necessários.

Clique aqui para mais informações sobre o Kubernetes deste projeto.

Inicializando a aplicação via Kubernetes

1 - Inicialize os containers do banco de dados:

make kube-db-up

Aguarde os containers do banco de dados subirem e execute o comando abaixo para verificar se os pods estão no estado Running:

kubectl get pods --watch

2 - Inicialize os containers da aplicação:

make kube-api-up

Aguarde os containers da aplicação subirem e execute o comando abaixo para verificar se os pods estão no estado Running:

kubectl get pods --watch

3 - Realize o seed dos dados:

make seed-kube

Caso queira testar a aplicação, vá para a seção Testando a aplicação via Postman.

Caso queira derrubar os containers, siga os passos abaixo:

4 - Derrubando os containers da aplicação:

make kube-api-down

5 - Derrubando os containers do banco de dados:

make kube-db-down

Testando a aplicação via Postman

1 - Executando as APIs via Postman

  1. Importar o arquivo da collection.
  2. Importar o arquivo do environment Kubernetes.

2 - Criando um Cliente

  1. Com a collection e environment importados, execute a rota que está em Clientes > Cadastrar Cliente.
  2. A collection está configurada para pegar o id do cliente criado e salvar no environment, para que possa ser utilizado nas próximas requisições.
  3. Para verificar se o cliente foi criado, execute a rota que está em Clientes > Obter todos os clientes.

3 - Criando um Pedido

  1. Execute a rota que está em Pedidos > Criar um pedido para um cliente.
  2. A collection está configurada para pegar o id do pedido criado e salvar no environment, para que possa ser utilizado nas próximas requisições.
  3. Para verificar se o pedido foi criado, execute a rota que está em Pedidos > Visualizar um pedido.
  4. Uma vez que o pedido foi criado, o status do pedido será Created.

4 - Adicionando itens ao Pedido

  1. Execute a rota que está em Pedidos > Adicionar um lanche ao pedido.
  2. Execute a rota que está em Pedidos > Adicionar um acompanhamento ao pedido.
  3. Execute a rota que está em Pedidos > Adicionar uma bebida ao pedido.
  4. Execute a rota que está em Pedidos > Adicionar uma sobremesa ao pedido.
  5. Para verificar se os itens foram adicionados ao pedido, execute a rota que está em Pedidos > Visualizar um pedido.
  6. ATENÇÃO: Os pedidos exibidos na rota Pedidos > Visualizar um pedido estarão nos seguintes status Received, OnGoing ou Done. Os pedidos Created estão aguardando o pagamento e os pedidos Completed já foram retirados pelo cliente.

5 - Realizando o checkout do Pedido

  1. Execute a rota que está em Pedidos > Realizar o checkout do pedido.
  2. Para verificar se o checkout foi realizado, execute a rota que está em Pedidos > Visualizar um pedido.

6 - Simulando o hook de Pagamento do Pedido

  1. Execute a rota que está em Pedidos > Simular o hook de pagamento para aprovar o pagamento.
  2. Para verificar se o pagamento foi realizado, execute a rota que está em Pedidos > Visualizar um pedido.
  3. Uma vez que o pagamento foi realizado, o pedido é disponibilizado para a cozinha, e o status do pedido será alterado para Received.

7 - Visualizando os pedidos prontos para serem iniciados na Cozinha

  1. Execute a rota que está em Pedidos > Visualizar os pedidos pagos e não iniciados.
  2. Será retornado de forma ordenada, os pedidos no status buscado, no caso Received.

8 - Iniciando um pedido na Cozinha

  1. Execute a rota que está em Pedidos > Iniciar preparo do pedido.
  2. Para verificar se o pedido foi iniciado na cozinha, execute a rota que está em Pedidos > Visualizar um pedido.
  3. Uma vez que o pedido foi iniciado na cozinha, o status do pedido é alterado para OnGoing.

9 - Pronto para retirar um pedido na Cozinha

  1. Execute a rota que está em Pedidos > Pedido pronto para retirada.
  2. Para verificar se o pedido está pronto para retirar, execute a rota que está em Pedidos > Visualizar um pedido.
  3. Uma vez que o pedido está pronto para retirar, o status do pedido é alterado para Done.

10 - Pedido entregue ao Cliente

  1. Execute a rota que está em Pedidos > Pedido entregue ao cliente.
  2. Para verificar se o pedido foi entregue ao cliente, execute a rota que está em Pedidos > Visualizar um pedido.
  3. Uma vez que o pedido foi entregue ao cliente, o status do pedido é alterado para Completed.