Skip to content

API para gerenciar pagamentos e processar dados das esteiras de produtos.

Notifications You must be signed in to change notification settings

gustavoalvessouza/iot-abp-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Máquina de vendas automática portátil

O Problema

A falta de pontos fixos de venda em eventos que ocorrem em cidades distantes. Máquinas de vendas convencionais são grandes e pesadas o que dificulta o transporte fazendo com que oportunidades de vendas em eventos sejam perdidas para isso a nossa solução propõem um projeto de máquina de vendas automática portátil onde que é facilmente carregada de evento em evento trazendo assim uma maior eficiência e maiores oportunidades, abaixo será documentado as etapas e processos para o desenvolvimento do MVP desta solução

Instalação

  • Clone este repositório git clone https://github.com/gustavoalvessouza/iot-abp-api.git
  • Instalar pacotes pnpm install
  • Rodar aplicação em modo de desenvolvimento pnpm start:dev
  • Preencha as variaveis de ambiente no arquivo .env de acordo com o exemplo no arquivo .env.example.

Diagrama de Arquitetura

Listas de Componentes utilizados

  • 3 ESP32
  • 2 Motores de Passo 28byj-48
  • 2 Controladores de Motor de passo Driver Uln2003 Arduino Robótica/nf
  • 2 Sensores Ultrassonicos Hc-Sr04
  • 1 Fonte 5V

Estrutura

Back-End

Tecnologias Utilizadas:

Node.js, JavaScript e TypeScrip

  • O projeto utiliza o ambiente de execução Node.js, que permite a execução de código JavaScript do lado do servidor. O código é desenvolvido principalmente em JavaScript, com o uso opcional de TypeScript para fornecer tipagem estática e outras funcionalidades avançadas.

Prisma

  • O Prisma é o principal ORM (Object-Relational Mapping) escolhido para a interação com o banco de dados. Ele simplifica a manipulação de dados, oferecendo uma abstração intuitiva para consultas ao banco de dados MongoDB.

MongoDB

  • O banco de dados escolhido para armazenar os dados do projeto é o MongoDB. Sua natureza de banco de dados NoSQL oferece flexibilidade e escalabilidade, adequando-se bem às necessidades do projeto.

Arquitetura

O projeto adota uma arquitetura limpa, que visa separar as responsabilidades em diferentes camadas para facilitar a manutenção e escalabilidade do sistema. A orientação a objetos é utilizada para promover um design modular e coeso.

Camadas da Arquitetura

Entidades

- Nesta camada, são definidas as entidades de negócio do sistema. Cada módulo do projeto possui suas próprias entidades, como máquinas de venda, esteiras, produtos, histórico de vendas e filas de venda.

Casos de Uso

- Os casos de uso representam as principais funcionalidades do sistema. Cada módulo possui seus próprios casos de uso, que interagem com as entidades para realizar operações específicas.

Controladores

- Os controladores atuam como interfaces entre as rotas da aplicação e os casos de uso correspondentes. Eles recebem as requisições, manipulam os dados necessários e chamam os casos de uso apropriados.

Gateways

- Os gateways são responsáveis pela comunicação com fontes externas, como o banco de dados MongoDB. O Prisma é utilizado como gateway para manipular os dados no banco de dados.

Módulos

vendingMachines

  • Este módulo é responsável por gerenciar as máquinas de venda. As entidades associadas incluem informações sobre as máquinas e funcionalidades relacionadas à venda de produtos.

vendingMachinesConveyors

  • O módulo vendingMachinesConveyors concentra-se no gerenciamento das esteiras das máquinas de venda.

products

  • O módulo products gerencia as informações sobre os produtos disponíveis para venda. Isso inclui detalhes como nome, preço e descrição.

productSalesHistory

  • Este módulo armazena o histórico de vendas dos produtos. Ele registra informações relevantes sobre cada transação realizada.

shoppings

  • O módulo shoppings é responsável por armazenar a fila de vendas. Ele gerencia a ordem em que as transações são processadas, garantindo uma experiência de compra eficiente.

Documentação Postman

A documentação das APIs está disponível no Postman para facilitar o teste e entendimento das funcionalidades. Você pode acessar a coleção Postman aqui

API De Pagamento

Mercado Pago

Etapas

  • 1ª A parte de pagamentos foi feita por meio de um API do mercado pago, aonde que foi criado uma conta da plataforma de developers do mercado pago para ter acesso a um acces token
  • 2ª Tendo o token de acesso foi criado um endpoint para a API que faz uma requisição do tipo POST para o endpoint do mercado /payaments passando todas as informações sendo elas, valor do pix, dados do comprador, endereço e access token
  • 3ª A API do mercado pago retorna um JSON contendo o QR CODE para o pagamento ser efetuado via pix
  • 4ª Para consultar o status do pagamento utilizamos o endpoint /payments, porém consultando via GET para ter a resposta se o pagamento foi efetuado com sucesso e prosseguir para próxima etapa.

Front-End

React + Vite

Front-end Feito em ReactJs Utilizando Vite. Vite é uma ferramenta de construção de projetos de frontend que se destina a oferecer uma experiência de desenvolvimento mais rápida e leve para projetos de web modernos.

Funções 🚀

Página Home

  • get(): Na página Home temos a função de get() que foi utilizada para buscar todos os dados dos produtos na máquina de vendas pelo endpoint: vending-machines/:id/products

No componente Modal temos outras funções:

  • payment(): A função de pagamento foi utilizada para realizar o pagaemnto do produto via pix na api do mercado pago pelo endpoint /payments/pix. Vale citar que, transaction_amount foi setado para 0.01 para fins de pix ilustrativos.

  • getPaymentStatus(id): A função checa se o pagamento foi aceito e validado, o parametro id vem no momento em que o pagamento é acionado ele retorna o id do pagamento, onde o mesmo é passado para a função que possui o endpoint: /payments/:id .

  • postConveyor(): A função posta para o backend qual é a esteira que ele deseja que caia o produto, para isso, passamos o conveyorId no body da requisição do endpoint: /shoppings, body:{conveyorId: id}.

Estilos 🖊

Para a estilização do front-end foi utilizada a biblioteca styled-components. A biblioteca permite fazer estilos em CSS nos arquivos JS, o que se torna mais fácil a criação de componentes.

Funcionamento Do Embarcado

Dois ESP32 das Esteiras

Funcionamento das funções

  • Inclui as bibliotecas
  • Define os pinos
  • Inicia os pinos de entrada e saída.
  • Inicia o wifi com auxílio do wifi maneger, que cria uma rede do esp para conectarmos com o celular e configurar em qual rede wifi ele deve conectar.
  • Inicia a task que fica consultando o backend se temos uma venda, assim que temos uma venda ele chama a função de ligar a esteira.
  • Função de ligar a esteira que gira o motor e inicia a leitura do sensor
  • Leitura do sensor, fica lendo o sensor e quando temos uma distância menor que 7cm (passa um item) ele desliga.

ESP32 da Central

Funcionamento das funções

  • Inicia uma rede WIFI para os ESP32 das Esteiras se conectarem a uma rede Wifi para poderem compratilhar a internet
  • Utiliza da biblioteca Wifimaneger para conectar as esteiras ao wifi

Time

Alaercio
Alaercio Marques

Belone
Belone Zorzeto

Carlos
Carlos Pasquali

Daniel Milak
Daniel Milak

Gustavo
Gustavo Alves

Vitor Penteado
Vítor Penteado

About

API para gerenciar pagamentos e processar dados das esteiras de produtos.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published