Skip to content

Commit

Permalink
Add docs and infra
Browse files Browse the repository at this point in the history
  • Loading branch information
wellyfrs committed Jul 26, 2024
1 parent 86a3da6 commit 91669c7
Show file tree
Hide file tree
Showing 42 changed files with 18,579 additions and 15 deletions.
56 changes: 47 additions & 9 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,22 +1,60 @@
name: Build

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read

steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Checkout Repository
uses: actions/checkout@v4

- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'

- name: Verify
run: mvn -B verify -DskipITs=false org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=FIAP-3SOAT-G15_healthmed-app
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

- name: Upload Test Reports
uses: actions/upload-artifact@master
with:
name: generated-reports
path: |
target/site
target/surefire-reports.html
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ vars.AWS_IAM_ROLE }}
aws-region: ${{ vars.AWS_REGION }}

- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2

- name: Verify
run: mvn verify
- name: Build, tag, and push docker image to Amazon ECR
#if: github.ref == 'refs/heads/main' && github.event_name == 'push'
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ${{ vars.AWS_ECR_REPO_NAME }}
IMAGE_TAG: "latest"
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
38 changes: 38 additions & 0 deletions .github/workflows/destroy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Destroy

on:
workflow_dispatch:

jobs:
destroy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: terraform
permissions:
id-token: write
contents: read
pull-requests: write

steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.branch }}

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ vars.AWS_IAM_ROLE }}
aws-region: ${{ vars.AWS_REGION }}

- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
cli_config_credentials_token: ${{ secrets.TF_CLOUD_USER_API_TOKEN }}

- name: Terraform Init
run: terraform init

- name: Terraform Destroy
run: terraform destroy -auto-approve
39 changes: 39 additions & 0 deletions .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Docs

on:
pull_request:
branches:
- main
paths:
- .github/workflows/docs.yml
- 'docs/**'
push:
branches:
- main
paths:
- .github/workflows/docs.yml
- 'docs/**'

jobs:
docs:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Build
run: make docs

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ vars.AWS_IAM_ROLE }}
aws-region: ${{ vars.AWS_REGION }}

- name: Sync S3 bucket
#if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: aws s3 sync ./site/ s3://${{ vars.AWS_S3_BUCKET_NAME }} --delete
67 changes: 67 additions & 0 deletions .github/workflows/provision.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Provision

on:
push:
branches:
- main
paths:
- .github/workflows/provision.yml
- 'terraform/**'
pull_request:
branches:
- main
paths:
- .github/workflows/provision.yml
- 'terraform/**'
workflow_dispatch:

jobs:
provision:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./terraform
permissions:
id-token: write
contents: read
pull-requests: write

steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ vars.AWS_IAM_ROLE }}
aws-region: ${{ vars.AWS_REGION }}

- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
with:
cli_config_credentials_token: ${{ secrets.TF_CLOUD_USER_API_TOKEN }}

- name: Terraform fmt
id: fmt
run: terraform fmt -check
continue-on-error: true

- name: Terraform Init
id: init
run: terraform init

- name: Terraform Validate
id: validate
run: terraform validate

- name: Terraform Plan
id: plan
run: terraform plan

- name: Check Errors
if: steps.plan.outcome == 'failure'
run: exit 1

- name: Terraform Apply
#if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: terraform apply -auto-approve -input=false
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,7 @@ out/

# OS
.DS_Store

# MkDocs

site
10 changes: 10 additions & 0 deletions Dockerfile.docs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

EXPOSE 8000

ENTRYPOINT ["mkdocs"]
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2023 Bleno Claus, Giovanni di Luca, Lucas Gabriel, Mateus Albino, Wellyson Freitas
Copyright (c) 2024 Bleno Claus, Giovanni di Luca, Lucas Gabriel, Mateus Albino, Wellyson Freitas

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
10 changes: 10 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
mkdocs:
@docker build --no-cache -f Dockerfile.docs -t mkdocs-fiap-3soat-g15-healthmed:latest .

docs: mkdocs
@docker run --rm -v ${CURDIR}:/usr/src/app mkdocs-fiap-3soat-g15-healthmed:latest build --clean

website: mkdocs
@docker run --rm -v ${CURDIR}:/usr/src/app -p 8000:8000 mkdocs-fiap-3soat-g15-healthmed:latest serve

.PHONY: mkdocs docs website
77 changes: 76 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,76 @@
# healthmed-app
# Health&Med

[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=FIAP-3SOAT-G15_healthmed-app&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=FIAP-3SOAT-G15_healthmed-app)

Autores membros do Grupo 15:

- Bleno Humberto Claus
- Giovanni Di Luca Evangelista
- Lucas Gabriel dos Santos
- Mateus Sales Albino
- Wellyson de Freitas Santos

## Requisitos

Health&Med, uma startup inovadora no setor de saúde, está desenvolvendo um novo sistema que irá revolucionar a Telemedicina no país. Atualmente, a startup oferece a possibilidade de agendamento de consultas e realização de consultas online (Telemedicina) por meio de sistemas terceiros como Google Agenda e Google Meetings.

Recentemente, a empresa recebeu um aporte e decidiu investir no desenvolvimento de um **sistema proprietário**, visando proporcionar um serviço de maior **qualidade**, **segurança dos dados** dos pacientes e **redução de custos**. O objetivo é criar um sistema **robusto, escalável e seguro** que permita o gerenciamento eficiente desses agendamentos e consultas.

Além de conter as funcionalidades de agendamento e realização de consultas online, o sistema terá o diferencial de uma nova funcionalidade: o Prontuário Eletrônico. O Prontuário Eletrônico permitirá o armazenamento e compartilhamento de documentos, exames, cartão de vacinas, e outros registros médicos entre as partes envolvidas, garantindo maior assertividade nos diagnósticos.

Para viabilizar o desenvolvimento de um sistema que esteja em conformidade com as melhores práticas de qualidade e arquitetura de software, a Health&Med contratou os alunos do curso (SOAT) para fazer a análise do projeto e a arquitetura do software.

[Continuar lendo...](/docs/README)

## Decisões de Arquitetura

1. [Infraestrutura](/docs/001-infraestrutura.md)
2. [Microserviços](/docs/002-microservicos.md)
3. [Bancos de dados](/docs/003-bancos-de-dados.md)
4. [Estratégia de testes](/docs/004-estrategia-de-testes.md)
5. [CI/CD](/docs/005-ci-cd.md)
6. [Orquestração de containers](/docs/006-orquestracao-de-containers.md)
7. [Observabilidade](/docs/007-observabilidade.md)
8. [Autenticação e autorização](/docs/008-autenticacao-e-autorizacao.md)
9. [Validação de médicos](/docs/009-validacao-de-medicos.md)
10. [Mensageria](/docs/010-mensageria.md)
11. [Notificações](/docs/011-notificacoes.md)
12. [Videoconferências](/docs/012-videoconferencias.md)
13. [Prontuário Eletrônico](/docs/013-prontuario-eletronico.md)
14. [LGPD](/docs/014-lgpd.md)
15. [Otimização de rede](/docs/015-otimizacao-de-rede.md)

## Diagramas de Arquitetura

### Diagrama de Contexto C4

![Diagrama de Contexto C4](docs/diagrams/c4-context.png)

### Diagrama de Container C4

![Diagrama de Container C4](docs/diagrams/c4-container.png)

### Diagrama de Infraestrutura em Nuvem

![Diagrama de Infraestrutura](docs/diagrams/infra-diagram.png)

### Diagramas de Entidade-Relacionamento

TODO

### Diagramas de Estado

TODO

### Diagramas de Sequência

TODO

## CI/CD

Descrição dos workflows do GitHub Actions:

- [build.yaml](.github/workflows/build.yaml): faz o build da aplicação, executando testes e análise estática.
- [destroy.yaml](.github/workflows/destroy.yaml): destrói todos os recursos de infra na AWS.
- [docs.yaml](.github/workflows/docs.yaml): cria o website para a documentação contida em [/docs](/docs).
- [provision.yaml](.github/workflows/provision.yaml): realiza o provisionamento dos recursos de infra na AWS.
24 changes: 24 additions & 0 deletions docs/001-infraestrutura.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Infraestrutura

## Contexto

De acordo com os requisitos não funcionais, o sistema deve ser (1) altamente disponível, (2) escalável e (3) seguro. A escolha da infraestrutura é crucial para atender a esses requisitos.

## Decisão

Optamos por utilizar utilizar um Cloud Provider, especificamente a AWS. Usaremos serviços de Iaas e PaaS, principalmente. Os recursos serão gerenciados como Infrastructure as Code através do Terraform.

## Consequências

### Positivas

- Alta disponibilidade e confiabilidade dos serviços AWS.
- Escalabilidade com Auto Scaling Groups, em serviços serverless, etc.
- Segurança compartilhada com o provedor.
- Versionamento e automação com Terraform.

### Negativas

- Custo da infraestrutura.
- Dependência de um fornecedor de nuvem.
- Complexidade de gerenciamento.
23 changes: 23 additions & 0 deletions docs/002-microservicos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Microserviços

## Contexto

De acordo com os requisitos não funcionais, o sistema precisa ser robusto e escalável, além de haver uma preocupação para reduzir custos e da garantia das melhores práticas de arquitetura de software. A escolha entre monolito e microserviços tem muita influência nesses quesitos.

## Decisão

Inicialmente, é recomendável começar com um monolito modular, isto é, um único serviço com módulos isolados que garantem uma separação tranquila no futuro. Tendo em mente o longo prazo, o aporte da Health&Med recebido, e os requisitos de escalabilidade e alta disponibilidade, optamos por uma arquitetura de microserviços (pelo menos trés: cadastro, agendamento, e prontuário).

## Consequências

### Positivas

- cada microserviço pode ser escalado de forma independente, permitindo uma melhor utilização dos recursos.
- equipes podem trabalhar em diferentes serviços ao mesmo tempo, aumentando a velocidade de desenvolvimento.
- problemas em um microserviço não necessariamente afetam todo o sistema.
- possibilidade de utilizar diferentes tecnologias e linguagens para diferentes microserviços conforme a necessidade.

### Negativas

- pode haver maior latência por causa da comunicação entre microserviços.
- é preciso uma grande infraestrutura para gerenciar, escalar, e monitorar todos os serviços.
Loading

0 comments on commit 91669c7

Please sign in to comment.