Appdelivery
Uma plataforma de código aberto com aplicativos para clientes, entregadores e restaurantes, que oferece flexibilidade para personalização completa em toda a sua estrutura.
Install / Use
/learn @carloshomar/AppdeliveryREADME
Plataforma de Delivery
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.
Discord: anypercent_ fique à vontade para esclarecer duvidas!<br/> Sinta-se à vontade para Adicionar, Modificar, Comercializar e Distribuir! <br/> Contribuições são sempre bem-vindas!
Se quiser apoiar nosso trabalho, contribua via Pix: loja.soberanatv@gmail.com. Agradecemos seu apoio!
Agradecimentos Especiais
<a target="_blank" href="https://www.youtube.com/@TecnologiaeClasse">Lucas Zawacki</a><br/> <a target="_blank" href="https://soberana.tv">Coletivo Soberana</a>
Backlog e Andamento do <a href="https://github.com/carloshomar/appdelivery/issues">Projeto</a>
Videos
<a target="_blank" href="./Arquitetura/video2.mp4">Video - Fazendo um pedidio, aceitando e produzindo o pedido, e realizando entrega (fluxo com todos os APPs)</a>
<a target="_blank" href="./Arquitetura/video1.mp4">Video - Utilizando o App de Comida</a>
App de Comida
<img src="./Arquitetura/IMG_9734.PNG" alt="IMG1" width="200"></img> <img src="./Arquitetura/IMG_9735.PNG" alt="IMG2" width="200"></img> <img src="./Arquitetura/IMG_9736.PNG" alt="IMG3" width="200"></img> <img src="./Arquitetura/IMG_9737.PNG" alt="IMG4" width="200"></img>
Web Restaurante
<img src="./Arquitetura/web_1.png" alt="web1" ></img> Kanban de fluxo de trabalho do restaurante, responsiva para celulares e computadores
Gestor de Cardápio
<img src="./Arquitetura/web_2.png" alt="web2" ></img> Gestor de cardápio para criação e alteração de produtos.
App de Entregas:
<img src="./Arquitetura/IMG_9967.PNG" alt="IMG2" width="200"></img> <img src="./Arquitetura/IMG_9966.PNG" alt="IMG4" width="200"></img> <img src="./Arquitetura/IMG_9964.PNG" alt="IMG3" width="200"></img> <img src="./Arquitetura/IMG_0165.PNG" alt="IMG3" width="200"></img>
Principais Características
-
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 <a href="Frontend/AppComida/config/config.tsx">arquivo de configurações</a> 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.
Técnico
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.
Arquitetura:

Uma arquitetura baseada em microserviços
Back-end / Infra:
- 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.
App Entregas e App Comida:
- 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.
Como Rodar Backend
É importante já ter o docker instalado no sistema operacional. Somente o backend inicia via docker, as aplicações frontend devem ser rodadas separadamente.
Rode no terminal:
cd ./Backend
docker compose up --build
As credenciais de banco estão presentes no docker-compose.yml. <br/> Para fazer o deploy é só seguir os passos que o <a href="/Backend/docker-compose.yml">docker-compose.yml</a> faz.
Rodar um serviço em especifico (opcional):
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
Como rodar o Frontend:
No arquivo <a href="Frontend/docker-compose.yml">Frontend/docker-compose.yml</a>, faça alterações na URL do backend, presente na variável API_BASE_URL. Você pode utilizar o ipconfig/ifconfig para obter o endereço IP local da máquina junto com a porta na qual o aplicativo está rodando, e então alterar a URL.
Ainda no arquivo <a href="Frontend/docker-compose.yml">Frontend/docker-compose.yml</a>, adicione as credenciais de acesso do Expo nas variáveis EXPO_USERNAME e EXPO_PASSWORD. Para obtê-las, basta se cadastrar em: <a href="https://expo.dev">https://expo.dev</a>. Adicione também seu IP local na variável EXPO_QR_GEN para que os QR codes dos apps sejam gerados corretamente.
Nos arquivos <a href="Frontend/AppComida/services/api.tsx">Frontend/AppComida/services/api.tsx</a>, <a href="Frontend/AppEntrega/services/api.tsx">Frontend/AppEntrega/services/api.tsx</a> e <a href="Frontend/WebRestaurant/src/services/api.js">Frontend/WebRestaurant/src/services/api.js</a>, faça alterações na URL para apontar para o backend que você subiu.
É importante já ter o docker instalado no sistema operacional.
Rode no terminal:
cd ./Frontend
docker compose up --build
O console vai exibir dois QRCodes para abrir os apps via Expo, e o painel WebRestaurante pode ser aberto usando http://localhost:3000.
Rodar um fronted em especifico (opicional):
Tenha o node instalado na sua maquina, no caso eu utilizei a v20.13.1
Nos 3 projetos de front-end (WEBRestaurante, AppComida, AppEntregas) existem arquivos no caminho services/api.tsx ou services/api.ts que precisam sofrer alterações da URL para apontar o backend/servidor que subiu. Utilizando Ipconfig/Ifconfig você precisa pegar o endereço IP ou DNS do servidor, juntamente com a porta em que está rodando o backend (docker).
O processo de alteração de URL deve ser realizado nas 3 aplicações, WEBRestaurante, AppComida, AppEntregas.
<b>Na parte WEB, em caso de não conseguir logar ou estiver tendo erro de CORS, considere instalar uma <a href="https://chromewebstore.google.com/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf?hl=pt-BR">extensão que desabilita CORS no seu navegador</a>, ou inicialize o mesmo sem essa politica.</b>
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.
Não necessários para rodar
Rodar um serviço em especifico:
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
Configuração do Estabelecimento
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.
Configure o Modo:
No arquivo <a href="Frontend/AppComida/config/config.tsx">Frontend/AppComida/config/config.tsx</a> 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.
Cadastrar Estabelecimento:
- 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 <b>(Pode ser feito pela aplicação WEBRestaurante)</b>
- Product & Order / Additional / Create Additional <b>(Pode ser feito pela aplicação WEBRestaurante)</b>
- Product & Order / Additional / Vinculo Additional Products <b>(Pode ser feito pela aplicação WEBRestaurante)</b>
Cadastrar Entregador:
- Cada entregador deve estar devidamente cadastrado, no próprio AppEntregas tem uma pagina de cadastro básica, somente para uso de testes.
Configuração de APPComida:
- No arquivo <a href="Frontend/AppComida/config/config.tsx">Frontend/AppComida/config/config.tsx</a>, 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, <a href="Frontend/AppComida/config/config.tsx">Frontend/AppComida/config/config.tsx</a>, atualize a propriedade ESTABLISHMENT_ID com o identificador gerado durante o cadastro do estabelecimento _(REQUEST: Auth / Create User & Establishmen
