Skip to content

Pequena arquitetura com o intuito de aplicar/testar conhecimentos em microserviços e Event-Driven.

Notifications You must be signed in to change notification settings

philippeoz/event-driven-architecture

Repository files navigation

Arquitetura baseada em eventos (microserviços)

Pequena arquitetura com o intuito de aplicar/testar conhecimentos em microserviços e Event-Driven.

A aplicação consistem em dois microserviços:

  • API de consultas médicas
    • Iniciar consulta
    • Finalizar consulta
  • API financeira
    • Verificar cobrança

Sempre que uma consulta é finalizada, um evento é lançado e uma cobrança é gerada a partir daquele evento.

Como as dependencias dos microserviços são basicamente as mesmas, optei por fazer um único build para os dois.

Durante o desenvolvimento foram utilizadas as seguintes tecnologias:

How to setup

Caso queira montar o ambiente na sua máquina eu recomendo instalar toda a parte python (microserviços) e deixar o restante rodando nos containers docker. Você pode utilizar o pyenv para gerenciar as versões do python e o virtualenvwrapper para gerenciar seus ambientes virtuais, uma combinação dos dois é só alegria.

Após montar o seu ambiente e instalar o poetry, basta um poetry install e todas as dependencias serão instaladas.

Faça uma cópia do arquivo .env.example renomeando para .env, após isso configure o novo arquivo com suas variáveis de ambiente.

  • Para executar o serviço de atendimentos médicos:
    python appointment/run.py
    
  • Para executar o serviço de financeiro.
    python financial/run.py
    

E claro, voce pode optar por rodar todo o projeto em containers docker, sem a necessidade de muitas instalações e setando as variáveis de ambiente direto no docker-composer, dentro da pasta do projeto basta executar:

docker-compose up --build

Caso queira deixar rodando em background:

docker-compose up --build -d

Docs

Os dois serviços possuem documentação com swagger e redoc. Acessando "/docs" você tem acesso ao Swagger, onde você também consegue testar os endpoints. Acessando "/redoc" você tem acesso ao ReDoc.

Você também pode monitorar os eventos utilizando o Kafdrop que estará rodando em http://localhost:19000.

Também foi adicionado um Nginx com o intuito de ser um "API Gateway", ad requisições enviadas para http://localhost/appointment/ e para http://localhost/financial/ são redirecionadas para os devidos serviços.

Routes

  • Appointment:
    • [POST] "/"
      // body
      
      {
         "physician_id": "ea959b03-5577-45c9-b9f7-a45d3e77ce82",
         "patient_id": "86158d46-ce33-4e3d-9822-462bbff5782e",
      }
      
      // response
      {
         "id": "84ab6121-c4a8-4684-8cc2-b03024ec0f1d",
         "start_date": "2020-12-01 13:00:00",
         "end_date": null,
         "physician_id": "ea959b03-5577-45c9-b9f7-a45d3e77ce82",
         "patient_id": "86158d46-ce33-4e3d-9822-462bbff5782e",
         "price": 200.00
      }
    • [POST] "/{id}/"
      // response
      {
          "id": "84ab6121-c4a8-4684-8cc2-b03024ec0f1d",
          "start_date": "2020-12-01 13:00:00",
          "end_date": "2020-12-01 14:00:00",
          "physician_id": "ea959b03-5577-45c9-b9f7-a45d3e77ce82",
          "patient_id": "86158d46-ce33-4e3d-9822-462bbff5782e",
          "price": 200.00
      }
  • Financial:
    • [GET] "/{id}/"
      // response
      {
          "appointment_id": "84ab6121-c4a8-4684-8cc2-b03024ec0f1d",
          "total_price": 400.00,
      }

ToDo

  • Implementar mais testes (testar o kafka).
  • Melhorar os mocks (motor, kafka)

About

Pequena arquitetura com o intuito de aplicar/testar conhecimentos em microserviços e Event-Driven.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published