Microsserviço de Pedidos do Sistema de Gestão de Restaurantes (RMS) desenvolvido pelo grupo "BOPE" G03 da turma 4SOAT para o Tech Challenge da Pós Tech em Software Architecture da FIAP.
Há uma lanchonete de bairro que está expandindo devido seu grande sucesso. Porém, com a expansão e sem um sistema de controle de pedidos, o atendimento aos clientes pode ser caótico e confuso. Por exemplo, imagine que um cliente faça um pedido complexo, como um hambúrguer personalizado com ingredientes específicos, acompanhado de batatas fritas e uma bebida. O atendente pode anotar o pedido em um papel e entregá-lo à cozinha, mas não há garantia de que o pedido será preparado corretamente.
Sem um sistema de controle de pedidos, pode haver confusão entre os atendentes e a cozinha, resultando em atrasos na preparação e entrega dos pedidos. Os pedidos podem ser perdidos, mal interpretados ou esquecidos, levando à insatisfação dos clientes e a perda de negócios.
Em resumo, um sistema de controle de pedidos é essencial para garantir que a lanchonete possa atender os clientes de maneira eficiente, gerenciando seus pedidos e estoques de forma adequada. Sem ele, expandir a lanchonete pode acabar não dando certo, resultando em clientes insatisfeitos e impactando os negócios de forma negativa.
Para solucionar o problema, a lanchonete irá investir em um sistema de autoatendimento de fast food, que é composto por uma série de dispositivos e interfaces que permitem aos clientes selecionar e fazer pedidos sem precisar interagir com um atendente.
— Fonte: FIAP
- Baixe e instale o Node.js em https://nodejs.org/en/download
- Instale o CLI do NestJS através do comando
npm i -g @nestjs/cli
- Navegue até a pasta raiz do projeto usando o Terminal;
- Faça uma cópia do arquivo
.env.template
com o nome.env
e preencha as variáveis de ambiente dentro dele; - Execute o comando
npm install
para instalar os pacotes npm; - Execute o comando
docker-compose up -d db-pedidos
para iniciar o container do banco de dados; - Execute o comando
docker-compose up -d localstack
para iniciar o localstack; - Use o comando
npm run start
para iniciar a aplicação. - Acesse o Swagger em http://localhost:3002/swagger/
Como executar a aplicação usando o Docker Compose?
- Clone este repositório;
- Navegue até a pasta raiz do projeto usando o Terminal;
- Faça uma cópia do arquivo
.env.template
com o nome.env
e preencha as variáveis de ambiente dentro dele; - Execute o comando
docker-compose up -d --build --force-recreate
- Acesse o Swagger em http://localhost:3002/swagger/
Como executar a aplicação usando o Kubernetes do Docker Desktop?
- Clone este repositório;
- Navegue até a pasta raiz do projeto usando o Terminal;
- Use o comando
docker build -t rms-api-pedidos:latest .
para gerar a imagem de container da aplicação; - Use o comando
kubectl apply -f k8s/development/postgres/namespace.yaml -f k8s/development/postgres/pvc-pv.yaml -f k8s/development/postgres/config.yaml -f k8s/development/postgres/secrets.yaml -f k8s/development/postgres/deployment.yaml -f k8s/development/postgres/service.yaml
para fazer deploy do banco de dados; - Use o comando
kubectl apply -f k8s/development/api/namespace.yaml -f k8s/development/api/config.yaml -f k8s/development/api/secrets.yaml -f k8s/development/api/deployment.yaml -f k8s/development/api/service.yaml -f k8s/development/api/hpa.yaml
para fazer deploy da aplicação; - Acesse o Swagger em http://localhost:3002/swagger/
Para remover a aplicação do Kubernetes, use o comando
kubectl delete namespace rms
Em seu ambiente de desenvolvimento, por questão de segurança, abra os arquivos /k8s/development/postgres/secrets.yaml
e /k8s/development/api/secrets.yaml
na pasta /k8s/development
e preencha os valores sensíveis manualmente.
No ambiente de produção os Secrets do Kubernetes são gerenciados pelo AWS Secrets Manager.
Para mais informações visite a página Boas práticas para secrets do Kubernetes.
Como testar o pagamento de pedidos através do QR Code do Mercado Pago?
Para testar o pagamento de pedidos usando o QR Code do Mercado Pago siga o passo a passo disponível na documentação da api-pagamentos.
Entendemos que o modelo relacional é o que mais se adequa ao nosso problema de negócio, contexto atual e requisitos no Microsserviço de Pedidos. Leia mais sobre as motivações para adoção do modelo relacional no Architectural Decision Record (ADR).
Quais são os parâmetros da conexão e credenciais para acesso ao banco de dados PostgreSQL?
Você pode conectar-se a instância de banco de dados PostgreSQL usando o pgAdmin, o terminal através do psql, ou qualquer outra IDE ou ferramenta compatível.
Host: localhost
Porta: 5432 (padrão)
Usuário: pguser
Senha: pgpwd
DB name: rms
A documentação do projeto está disponível no GitHub Wiki.
Padrão implementado: Coreografia
Por que optamos por uma SAGA coreografada?
Nossa aplicação é relativamente simples. Dada a simplicidade da nossa aplicação, no nosso cenário não corremos o risco de enfrentar problemas de dependências cíclicas, nem tampouco enfrentamos dificuldades em fazer o entendimento e o mapeamento de todos os membros envolvidos na SAGA, já que a nossa SAGA possui poucos membros. Sabendo disso, dado o nosso contexto, optamos pela SAGA coreografada, conforme recomendado por Chris Richardson no livro "Microservices Patterns", indo de encontro também a recomendação feita pelo professor durante as aulas.
Clique na imagem para ampliar.
Architectural Pattern: Clean Architecture + Screaming Architecture
Clique na imagem para ampliar.
Cloud provider: AWS
Clique na imagem para ampliar.
Para contribuir com o projeto consulte o guia em CONTRIBUTING.md
$ npm install
# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
API Catálogo
https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-catalogo
API de Pagamentos
https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-pagamentos
Amazon Cognito Lambda triggers
https://github.com/Grupo-G03-4SOAT-FIAP/rms-cognito-triggers
Infrastructure as code (IaC) com Terraform
https://github.com/Grupo-G03-4SOAT-FIAP/rms-iac
API de Privacidade
https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-privacidade
Os reports de "antes" e "depois" encontram-se na pasta /docs/zap-scanning-report
Clique aqui para acessar
Como escanear a API usando o OWASP ZAP?
Para escanear todos os endpoints da API em busca de vulnerabilidades siga o passo a passo abaixo.
- Execute a aplicação usando o Docker Compose;
- Execute o comando abaixo:
docker run --name zap --network host -v $(pwd):/zap/wrk/:rw -t zaproxy/zap-stable zap-api-scan.py -t http://localhost:3002/swagger-json -f openapi -r report.html
Substitua os parenteses em
$(pwd)
por chaves${pwd}
no Windows.
O report em formato HTML será gerado no diretório atual.
Clique aqui para obter mais informações sobre o API Scan do ZAP.
Node.js v20.12.0 (LTS), Docker Desktop 24.0.6 e Kubernetes v1.28
Pagamentos processados por Mercado Pago.