diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c5494fba..a1809663 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -19,7 +19,7 @@ on: env: AWS_REGION: ${{ secrets.AWS_REGION }} # set this to your preferred AWS region, e.g. us-west-1 ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY }} # set this to your Amazon ECR repository name - CONTAINER_NAME: rms-bff # set this to the name of the container in the + CONTAINER_NAME: rms-api-monolito # set this to the name of the container in the # containerDefinitions section of your task definition permissions: diff --git a/README.md b/README.md index b97f6417..f5b8adf3 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,16 @@ # Restaurant Management System -[![Deploy to Amazon EKS](https://github.com/Grupo-G03-4SOAT-FIAP/rms-bff/actions/workflows/deploy.yml/badge.svg)](https://github.com/Grupo-G03-4SOAT-FIAP/rms-bff/actions/workflows/deploy.yml) -[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) +[![Deploy to Amazon EKS](https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-monolito/actions/workflows/deploy.yml/badge.svg)](https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-monolito/actions/workflows/deploy.yml) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) 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](https://postech.fiap.com.br/curso/software-architecture/). -### O PROBLEMA +> [!WARNING] +> Essa aplicação monolítica foi decomposta em microsserviços e não será mais mantida, nem receberá novas funcionalidades. Visite a [página da organização](https://github.com/Grupo-G03-4SOAT-FIAP) no GitHub para visualizar todos os microsserviços. + +## O PROBLEMA *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.* @@ -30,7 +33,7 @@ Sistema de Gestão de Restaurantes (RMS) desenvolvido pelo grupo *"BOPE"* G03 da ![Kubernetes](https://img.shields.io/badge/kubernetes-%23326ce5.svg?style=for-the-badge&logo=kubernetes&logoColor=white) ![Terraform](https://img.shields.io/badge/terraform-%235835CC.svg?style=for-the-badge&logo=terraform&logoColor=white) -![mercado-pago](https://github.com/Grupo-G03-4SOAT-FIAP/rms-bff/assets/5115895/ad2f673e-ba14-4824-b2dd-24dbbce72bf3) +![mercado-pago](https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-monolito/assets/5115895/ad2f673e-ba14-4824-b2dd-24dbbce72bf3) ## Executar a aplicação @@ -40,7 +43,7 @@ Sistema de Gestão de Restaurantes (RMS) desenvolvido pelo grupo *"BOPE"* G03 da 4. Faça uma cópia do arquivo `.env.template` com o nome `.env` e preencha as variáveis de ambiente dentro dele; 5. Execute o comando `npm install` para instalar os pacotes npm; 6. Use o comando `npm run start` para iniciar a aplicação. -7. Execute o comando `docker-compose up db` para iniciar o container do banco de dados; +7. Execute o comando `docker-compose up -d db` para iniciar o container do banco de dados; 8. Acesse o Swagger em http://localhost:3000/swagger/
@@ -65,7 +68,7 @@ Sistema de Gestão de Restaurantes (RMS) desenvolvido pelo grupo *"BOPE"* G03 da 1. Clone este repositório; 2. Navegue até a pasta raiz do projeto usando o Terminal; -3. Use o comando `docker build -t rms-bff:latest .` para gerar a imagem de container da aplicação; +3. Use o comando `docker build -t rms-api-monolito:latest .` para gerar a imagem de container da aplicação; 4. 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; 5. Use o comando `kubectl apply -f k8s/development/bff/namespace.yaml -f k8s/development/bff/config.yaml -f k8s/development/bff/secrets.yaml -f k8s/development/bff/deployment.yaml -f k8s/development/bff/service.yaml -f k8s/development/bff/hpa.yaml` para fazer deploy da aplicação; 6. Acesse o Swagger em http://localhost:3000/swagger/ @@ -129,16 +132,18 @@ A documentação do projeto está disponível no [GitHub Wiki](https://github.co Architectural Pattern: [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) + [Screaming Architecture](https://blog.cleancoder.com/uncle-bob/2011/09/30/Screaming-Architecture.html) -![uml-clean-arch drawio](https://github.com/Grupo-G03-4SOAT-FIAP/rms-bff/assets/5115895/c19b37cb-5d1a-4328-8611-f9321a95e068) +![uml-clean-arch drawio](https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-monolito/assets/5115895/c19b37cb-5d1a-4328-8611-f9321a95e068) *Clique na imagem para ampliar.* ## Diagrama de arquitetura cloud Cloud provider: AWS -![Diagrama de arquitetura cloud drawio](https://github.com/Grupo-G03-4SOAT-FIAP/rms-bff/assets/5115895/7cf5b858-5c7e-47d6-9def-2cda7e470134) +![Diagrama de arquitetura cloud drawio](https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-monolito/assets/5115895/7cf5b858-5c7e-47d6-9def-2cda7e470134) *Clique na imagem para ampliar.* +![registry_and_authorizer_dark](https://github.com/Grupo-G03-4SOAT-FIAP/rms-api-monolito/assets/5115895/51c34341-099e-4395-a2a9-acdb62cc6c71) + ## Como contribuir Para contribuir com o projeto consulte o guia em [CONTRIBUTING.md](CONTRIBUTING.md) @@ -177,17 +182,17 @@ $ npm run test:cov ## Métricas de código -[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=bugs)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) -[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-bff&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=bugs)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) +[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Grupo-G03-4SOAT-FIAP_rms-api-monolito&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) ## Projetos relacionados @@ -202,4 +207,4 @@ https://github.com/Grupo-G03-4SOAT-FIAP/rms-iac *Node.js v20.12.0 (LTS), Docker Desktop 24.0.6 e Kubernetes v1.28*\ *Pagamentos processados por Mercado Pago.* -[![SonarCloud](https://sonarcloud.io/images/project_badges/sonarcloud-white.svg)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-bff) +[![SonarCloud](https://sonarcloud.io/images/project_badges/sonarcloud-white.svg)](https://sonarcloud.io/summary/new_code?id=Grupo-G03-4SOAT-FIAP_rms-api-monolito) diff --git a/docs/arquitetura-cloud/Diagrama de arquitetura cloud.drawio b/docs/arquitetura-cloud/Diagrama de arquitetura cloud.drawio index edcf53d9..c5395e41 100644 --- a/docs/arquitetura-cloud/Diagrama de arquitetura cloud.drawio +++ b/docs/arquitetura-cloud/Diagrama de arquitetura cloud.drawio @@ -34,10 +34,10 @@ - + - + @@ -100,7 +100,7 @@ - + @@ -109,13 +109,13 @@ - + - + @@ -183,7 +183,7 @@ - + @@ -208,7 +208,7 @@ - + @@ -217,7 +217,7 @@ - + @@ -229,7 +229,7 @@ - + @@ -238,13 +238,13 @@ - + - + @@ -265,7 +265,7 @@ - + @@ -274,13 +274,13 @@ - + - + @@ -381,7 +381,7 @@ - + @@ -409,7 +409,7 @@ - + @@ -418,7 +418,7 @@ - + diff --git a/k8s/development/bff/config.yaml b/k8s/development/bff/config.yaml index c2287e86..4bbaa060 100644 --- a/k8s/development/bff/config.yaml +++ b/k8s/development/bff/config.yaml @@ -1,10 +1,10 @@ apiVersion: v1 kind: ConfigMap metadata: - name: rms-bff-config + name: rms-api-monolito-config namespace: rms labels: - app: rms-bff + app: rms-api-monolito data: DB_NAME: "rms" DB_SSL: "false" diff --git a/k8s/development/bff/deployment.yaml b/k8s/development/bff/deployment.yaml index be374e76..d638dc9f 100644 --- a/k8s/development/bff/deployment.yaml +++ b/k8s/development/bff/deployment.yaml @@ -1,43 +1,43 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: rms-bff + name: rms-api-monolito namespace: rms labels: - app: rms-bff + app: rms-api-monolito spec: replicas: 3 selector: matchLabels: - app: rms-bff + app: rms-api-monolito template: metadata: labels: - app: rms-bff + app: rms-api-monolito spec: automountServiceAccountToken: false containers: - - name: rms-bff - image: rms-bff:latest # No Kubernetes do Docker Desktop a imagem deve já estar presente no cache de imagens do Docker na máquina local + - name: rms-api-monolito + image: rms-api-monolito:latest # No Kubernetes do Docker Desktop a imagem deve já estar presente no cache de imagens do Docker na máquina local imagePullPolicy: IfNotPresent # Necessário definir "IfNotPresent" ao utilizar o Kubernetes do Docker Desktop para evitar erros "ImagePullBackOff" ao criar os Pods envFrom: - configMapRef: - name: rms-bff-config + name: rms-api-monolito-config env: - name: DB_USERNAME valueFrom: secretKeyRef: - name: rms-bff-secret + name: rms-api-monolito-secret key: DB_USERNAME - name: DB_PASSWORD valueFrom: secretKeyRef: - name: rms-bff-secret + name: rms-api-monolito-secret key: DB_PASSWORD - name: ACCESS_TOKEN_MERCADOPAGO valueFrom: secretKeyRef: - name: rms-bff-secret + name: rms-api-monolito-secret key: ACCESS_TOKEN_MERCADOPAGO ports: - containerPort: 3000 diff --git a/k8s/development/bff/hpa.yaml b/k8s/development/bff/hpa.yaml index 91215451..b2b66a18 100644 --- a/k8s/development/bff/hpa.yaml +++ b/k8s/development/bff/hpa.yaml @@ -1,13 +1,13 @@ apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: - name: rms-bff + name: rms-api-monolito namespace: rms spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment - name: rms-bff # name do Deployment a ser escalado automaticamente pelo HPA + name: rms-api-monolito # name do Deployment a ser escalado automaticamente pelo HPA minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 50 diff --git a/k8s/development/bff/secrets.yaml b/k8s/development/bff/secrets.yaml index 24e5c2f6..a95c191a 100644 --- a/k8s/development/bff/secrets.yaml +++ b/k8s/development/bff/secrets.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Secret metadata: - name: rms-bff-secret + name: rms-api-monolito-secret namespace: rms type: Opaque data: diff --git a/k8s/development/bff/service.yaml b/k8s/development/bff/service.yaml index eec9fb49..2ba06a26 100644 --- a/k8s/development/bff/service.yaml +++ b/k8s/development/bff/service.yaml @@ -1,13 +1,13 @@ apiVersion: v1 kind: Service metadata: - name: rms-bff + name: rms-api-monolito namespace: rms labels: - app: rms-bff + app: rms-api-monolito spec: selector: - app: rms-bff + app: rms-api-monolito type: LoadBalancer # O type "LoadBalancer" torna o service acessível fora do cluster, em localhost, no Kubernetes do Docker Desktop ports: - protocol: TCP diff --git a/k8s/production/bff/config.yaml b/k8s/production/bff/config.yaml index fcf0b0d4..fc31debf 100644 --- a/k8s/production/bff/config.yaml +++ b/k8s/production/bff/config.yaml @@ -1,10 +1,10 @@ apiVersion: v1 kind: ConfigMap metadata: - name: rms-bff-config + name: rms-api-monolito-config namespace: rms labels: - app: rms-bff + app: rms-api-monolito data: DB_NAME: "rms" DB_SSL: "false" diff --git a/k8s/production/bff/deployment.yaml b/k8s/production/bff/deployment.yaml index 3963845b..94427baa 100644 --- a/k8s/production/bff/deployment.yaml +++ b/k8s/production/bff/deployment.yaml @@ -1,19 +1,19 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: rms-bff + name: rms-api-monolito namespace: rms labels: - app: rms-bff + app: rms-api-monolito spec: replicas: 3 selector: matchLabels: - app: rms-bff + app: rms-api-monolito template: metadata: labels: - app: rms-bff + app: rms-api-monolito spec: serviceAccountName: aws-iam-serviceaccount # ServiceAccount com Role que permite acesso ao AWS Secrets Manager automountServiceAccountToken: false @@ -25,11 +25,11 @@ spec: volumeAttributes: secretProviderClass: aws-secrets containers: - - name: rms-bff + - name: rms-api-monolito image: 900534935988.dkr.ecr.us-east-1.amazonaws.com/rms:latest envFrom: - configMapRef: - name: rms-bff-config + name: rms-api-monolito-config volumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" diff --git a/k8s/production/bff/hpa.yaml b/k8s/production/bff/hpa.yaml index 4cd23e97..0a9882b1 100644 --- a/k8s/production/bff/hpa.yaml +++ b/k8s/production/bff/hpa.yaml @@ -1,13 +1,13 @@ apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: - name: rms-bff + name: rms-api-monolito namespace: rms spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment - name: rms-bff # name do Deployment a ser escalado automaticamente pelo HPA + name: rms-api-monolito # name do Deployment a ser escalado automaticamente pelo HPA minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 50 \ No newline at end of file diff --git a/k8s/production/bff/service.yaml b/k8s/production/bff/service.yaml index 620f562d..8ab97d39 100644 --- a/k8s/production/bff/service.yaml +++ b/k8s/production/bff/service.yaml @@ -1,13 +1,13 @@ apiVersion: v1 kind: Service metadata: - name: rms-bff + name: rms-api-monolito namespace: rms labels: - app: rms-bff + app: rms-api-monolito spec: selector: - app: rms-bff + app: rms-api-monolito type: LoadBalancer ports: - protocol: TCP diff --git a/sonar-project.properties b/sonar-project.properties index 2340e990..131ea2f4 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,8 +1,8 @@ -sonar.projectKey=Grupo-G03-4SOAT-FIAP_rms-bff +sonar.projectKey=Grupo-G03-4SOAT-FIAP_rms-api-monolito sonar.organization=grupo-g03-4soat-fiap # This is the name and version displayed in the SonarCloud UI. -#sonar.projectName=rms-bff +#sonar.projectName=rms-api-monolito #sonar.projectVersion=1.0