O Delivery é uma plataforma de código aberto que permite a personalização completa com a marca e identidade visual do seu restaurante ou mais restaurantes. Similar aos principais apps do mercado, possibilita que restaurantes estabeleçam um canal de vendas diretas, eliminando intermediários e proporcionando uma experiência de compra mais próxima aos usuários. Isso não apenas reduz custos desnecessários, mas também simplifica a gestão do estabelecimento.
Fique a vontade para Adicionar, Modificar, Comercializar e Distribuir!
Contribuições são sempre bem-vindas!
Video - Utilizando o App de Comida
Kanban de fluxo de trabalho do restaurante.
Gestor de cardápio para criação e alteração de produtos.
-
Modos de estabelecimentos: Existe o modo unique que deixa o app focado em um estabelecimento e também o modo multi que lista os estabelecimentos presentes no servidor, no arquivo de configurações você pode selecionar o estilo desejado.
-
Personalização Total: Coloque sua marca e identidade visual no sistema, transformando-o em uma extensão exclusiva do seu restaurante.
-
Vendas Diretas: Elimine intermediários e suas taxas, oferecendo aos clientes uma experiência de compra mais acessível.
-
Gestão Simplificada: Mantenha e simplifique a gestão do estabelecimento com a facilidade de operar o sistema.
-
Uso Próprio de Entregadores: O sistema não gerencia a entrega, permitindo o uso de entregadores próprios para garantir uma experiência de entrega de alta qualidade.
-
Arquitetura Eficiente: O servidor foi projetado para suportar um ou mais aplicativos simultaneamente, permitindo a divisão de custos e manutenção simplificada em larga escala.
Um servidor tem a capacidade de executar simultaneamente N aplicativos. Dessa forma, torna-se viável reduzir os custos do servidor, necessitando apenas de um servidor para sustentar toda a infraestrutura de aplicativos.
Uma arquitetura baseada em microserviços
- Arquitetura baseada em microsserviços, permitindo a adição de novos serviços na linguagem desejada.
- Utiliza GoLang devido à sua performance e baixo consumo de recursos.
- O GoLang utiliza também o Fiber como framework API.
- Implementado em Docker, facilitando a inicialização do servidor sem exigir amplo conhecimento técnico.
- Desenvolvido em React Native e Expo, possibilitando a publicação na App Store e Google Play.
- Utiliza o Expo para build gratuito na nuvem, dispensando a necessidade de um MacOS, especialmente para iOS.
É importante já ter o docker instalado no sistema operacional.
Rode no terminal:
docker compose up --build
As credenciais de banco estão presentes no docker-compose.yml.
Para fazer o deploy é só seguir os passos que o docker-compose.yml faz.
Para rodar os microserviços separadamente você precisa já ter o GoLang instalado em sua maquina, acessar a pasta do microsserviço pelo terminal e utilizar:
go mod tidy
go install
Para rodar:
go run main.go
Tenha o node instalado na sua maquina, no caso eu utilizei a v20.13.1
No arquivo Frontend/AppComida/services/api.tsx faça alterações da URL para apontar o backend que você subiu. Utilizando Ipconfig/Ifconfig é só pegar o endereço de IP da maquina juntamente com a porta que está rodando aplicativo e alterar a url.
O processo de alteração de URL deve ser realizado nas 3 aplicações, WEBRestaurante, AppComida, AppEntregas.
Na parte WEB, em caso de não conseguir logar ou estiver tendo erro de CORS, considere instalar uma extenão que desabilita CORS no seu navegador, ou inicialize o mesmo sem essa politica.
Instalando dependências.
npm install
Para rodar:
npm start
Baixe o App do EXPO, no seu celular, pela loja de aplicativos e esteja conectado na mesma rede que o seu computador, o aplicativo será visto por toda rede interna enquando estiver em desenvolvimento.
Tendo postman na sua maquina, é só importar a biblioteca de requests presentes na pasta Backend/docs/delivery.postman_collection.json no qual você terá acesso a uma mini documentação dos endpoints e formatos esperados pela API.
No arquivo Frontend/AppComida/config/config.tsx altere a variavel APP_MODE para .unique ou .multi.
-
Unique: Para quando o app é voltado somente para 1 unico restaurante, neste caso ele consome da variavel estatica ESTABLISHMENT, também presente no arquivo.
-
Multi: Para quando o app deve comportar todos os restaurantes cadastrados no servidor, e fornece a possibilidade do usuário selecionar o restaurante que bem deseja.
- Auth / Create User & Establishment (Fique atento a geolocalização do estabelecimento, para o calculo correto de entrega)
- Product & Order / Delivery / Alter Taxe Delivery
- Product & Order / Products / Create Multi Products (Pode ser feito pela aplicação WEBRestaurante)
- Product & Order / Additional / Create Additional (Pode ser feito pela aplicação WEBRestaurante)
- Product & Order / Additional / Vinculo Additional Products (Pode ser feito pela aplicação WEBRestaurante)
- No arquivo Frontend/AppComida/config/config.tsx, na propriedade ESTABLISHMENT, modifique o objeto com as informações desejadas, incluindo logotipos e coordenadas geográficas do estabelecimento (para cálculos de distância).
- No mesmo arquivo, Frontend/AppComida/config/config.tsx, atualize a propriedade ESTABLISHMENT_ID com o identificador gerado durante o cadastro do estabelecimento (REQUEST: Auth / Create User & Establishment).
- Quando o pedido é feito pelo app de comida e aprovado pelo estabelecimento, ele é publicada na fila indicada na variável de ambiente:
RABBIT_DELIVERY_QUEUE
. - Quando o status do pedido é alterado por parte do entregador, o evento é publicado na fila indicada na variável de ambiente:
RABBIT_ORDER_QUEUE
.
- Cada restaurante tem seu próprio valor de entrega e distância de atendimento.
- O cálculo consiste em pôr um valor fixo (Taxa de Serviço) fixedTaxa e um valor por KM perKm.
- Baseado na distância recebida, o app calcula a distância através do algoritmo de Haversine (exite um metodo no backend e frontend para esse calculo), envia para o backend e recebe o valor calculado de acordo com o estabelecimento.
- Cada entregador deve estar devidamente cadastrado. A documentação no Postman pode ser encontrada em: Auth/DeliveryMan/Register Deliveryman.
- Toda entrega realizada pelo entregador é salva em seu extrato, que pode ser visualizado no seu respectivo APP.
- É permitida somente uma entrega por vez, por entregador. (Existe a possibilidade de adição de uma fila de pedidos para entrega no AppEntrega. Por se tratar de um array, pretendo adicionar como feature futura)
- No endpoint Delivery/Orders, o entregador envia sua localização e recebe os pedidos ao redor. (Pretendo utilizar esse endpoint para rastreio das localizações percorridas pelo entregador, inclusive seu caminho percorrido, para cálculos de gastos calóricos e etc.)
- Todos os dados do restaurante podem ser alterados pelo painel WEBRestaurante.
- Os restaurantes são cadastrados via endpoint (Auth / Create User & Establishment). A página de cadastro de restaurante está em desenvolvimento futuro.
- O restaurante faz o cadastramento de todos os seus produtos e "abre o estabelecimento" na aplicação WEBRestaurante.
- O cliente realiza o pedido e indica a forma de pagamento, que pode ser feita na entrega. Atualmente, não temos integração com APIs de pagamento, mas isso pode ser implementado em qualquer linguagem e facilmente devido à arquitetura.
- O restaurante aceita/recusa o pedido, arrastando-o para os próximos estágios do Painel Principal (Quadro Kanban).
- Ao arrastar o pedido para o estágio de "Em produção", o mesmo aparece disponível para entrega aos entregadores ao redor.
- Enquanto o pedido está no estágio de "Em produção", o entregador se locomove até o estabelecimento e consegue sinalizar no AppEntrega que chegou ao estabelecimento. O restaurante recebe essa alteração no status do pedido.
- Ao arrastar o pedido para "Pronto para Entrega", o restaurante consegue entregar o pedido no balcão. Para isso, é necessário o código do restaurante (código de quatro dígitos que está disponível no card do pedido, na parte WEB do restaurante).
- Ao receber o pedido, o entregador pode se locomover ao encontro do cliente e, ao entregar o pedido, solicitar o respectivo código de entrega (código de quatro dígitos disponível na área de pedidos no APP do Cliente).
- Disclamer: no código atual da main, adicionei o Código do Cliente (em vermelho) no card do pedido, isso é para facilitar os teste, em caso de publicação o ideal é remover o Código do Cliente da Visualização do Restaurante (Quadro Kanban), más pode variar de acordo com a regra de negócio.
- Após a entrega, o pedido sai do Painel Principal (Quadro Kanban) do restaurante, e a entrega é salva na tela de Extrato do entregador.
O fluxo acima de Etapas de Entrega pode ser visualizado no primeiro video.