Giter Club home page Giter Club logo

carloshomar / appdelivery Goto Github PK

View Code? Open in Web Editor NEW
21.0 6.0 3.0 155.73 MB

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.

License: MIT License

Dockerfile 0.36% Go 22.74% Lua 0.70% TypeScript 52.21% JavaScript 23.13% CSS 0.36% HTML 0.51%
delivery deliveryman entregador ifood rappi comida food microsservicos golang react-native

appdelivery's Introduction

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.

Fique a vontade para Adicionar, Modificar, Comercializar e Distribuir!
Contribuições são sempre bem-vindas!

Videos

Video - Fazendo um pedidio, aceitando e produzindo o pedido, e realizando entrega (fluxo com todos os APPs)

Video - Utilizando o App de Comida

App de Comida

IMG1 IMG2 IMG3 IMG4

Web Restaurante

web1 Kanban de fluxo de trabalho do restaurante.

Gestor de Cardápio

web2 Gestor de cardápio para criação e alteração de produtos.

App de Entregas:

IMG2 IMG4 IMG3 IMG3

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 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.

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:

image info

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.

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.

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

Frontend:

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.

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 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.

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 (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)

Configuração de APPComida:

  • 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).

Eventos do Pedido (RabbitMQ)

  • 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.

Detalhes Gerais

Cálculo de Entrega:

  • 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.

Entregador:

  • 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.)

Restaurante:

  • 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.

Etapas de Entrega:

  • 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.

Atenciosamente, CHomar
Discord: anypercent_

appdelivery's People

Contributors

carloshomar avatar yanagassi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

appdelivery's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.