Skip to content

iclinic/iclinic-node-challenge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

iClinic logo

Desafio

A missão da iClinic é descomplicar a saúde no Brasil levando mais gestão a clínicas e consultórios através da tecnologia e, com isso, possibilitar que médicos e outros profissionais promovam mais saúde aos seus pacientes.

Seu desafio será desenvolver um serviço de prescrição médica e, como parte dele, veremos como você estrutura as camadas de aplicação, chamadas externas, variáveis de ambiente, cache, testes unitários, logs e documentação.

Solução

Implementar uma API REST [POST] /v2/prescriptions para inserir novas prescrições.

  • O serviço de prescrição deverá persistir no banco de dados somente os atributos recebidos no request;
  • Os serviços dependentes deverão ser consultados para compor os dados a serem enviados ao serviço de métricas;
  • Se o serviço de clínicas não responder, o request deverá seguir normalmente, pois o nome da clínica é o único atributo não obrigatório do serviço de métricas;
  • Os dados deverão ser integrados com o serviço de métricas, caso isso não ocorra (por qualquer motivo) deverá ser feito rollback e falhar o request;
  • A API REST deverá retornar um erro quando exceder o timeout e a quantidade de tentativas de algum serviço dependente;

Considere as informações abaixo para desenvolver o teste. Se tiver algum tipo de erro não mapeado fique a vontade para adicionar :)

Request

curl -X POST \
  http://localhost:5000/v2/prescriptions \
  -H 'Content-Type: application/json' \
  -d '{
  "clinic": {
    "id": 1
  },
  "physician": {
    "id": 1
  },
  "patient": {
    "id": 1
  },
  "text": "Dipirona 1x ao dia"
}'

Response.body

{
  "data": {
    "id": 1,
    "clinic": {
      "id": 1
    },
    "physician": {
      "id": 1
    },
    "patient": {
      "id": 1
    },
    "text": "Dipirona 1x ao dia"
  }
}

Response.body (error)

{
  "error": {
    "message": "patient not found",
    "code": "03"
  }
}

Tipos de erros sugeridos

code message
01 malformed request
02 physician not found
03 patient not found
04 metrics service not available
05 physicians service not available
06 patients service not available

Serviços dependentes

host method path authorization header timeout retry cache ttl
https://5f71da6964a3720016e60ff8.mockapi.io/v1 GET /physicians/:id Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJzZXJ2aWNlIjoicGh5c2ljaWFucyJ9.Ei58MtFFGBK4uzpxwnzLxG0Ljdd-NQKVcOXIS4UYJtA 4s 2 48hrs
https://5f71da6964a3720016e60ff8.mockapi.io/v1 GET /clinics/:id Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJzZXJ2aWNlIjoiY2xpbmljcyJ9.r3w8KS4LfkKqZhOUK8YnIdLhVGJEqnReSClLCMBIJRQ 5s 3 72hrs
https://5f71da6964a3720016e60ff8.mockapi.io/v1 GET /patients/:id Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJzZXJ2aWNlIjoicGF0aWVudHMifQ.Pr6Z58GzNRtjX8Y09hEBzl7dluxsGiaxGlfzdaphzVU 3s 2 12hrs
https://5f71da6964a3720016e60ff8.mockapi.io/v1 POST /metrics Bearer SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 6s 5

Metrics Request.body

curl -X POST \
  https://mysterious-island-73235.herokuapp.com/api/metrics \
  -H 'Authorization: Bearer SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' \
  -H 'Content-Type: application/json' \
  -d '{
  "clinic_id": 1,
  "clinic_name": "Clínica A",
  "physician_id": 1,
  "physician_name": "José",
  "physician_crm": "SP293893",
  "patient_id": 1,
  "patient_name": "Rodrigo",
  "patient_email": "rodrigo@gmail.com",
  "patient_phone": "(16)998765625"
}'

Metrics Response.body

{
    "id": "4d8d9a5a-69d4-45ec-a82e-0b18e8d6276d",
    "clinic_id": 1,
    "clinic_name": "Clinica A",
    "physician_id": 1,
    "physician_name": "Dr. João",
    "physician_crm": "SP293893",
    "patient_id": 1,
    "patient_name": "Rodrigo",
    "patient_email": "rodrigo@gmail.com",
    "patient_phone": "(16)998765625"
}

O que esperamos

  • Que o desafio seja feito em Node.js;
  • Que considere as colunas de timeout, retry e cache ttl nas chamadas dos serviços dependentes;
  • TDD;
  • Princípios SOLID;
  • 12Factor;
  • Passo-a-passo de como rodar sua aplicação;

Boa Sorte, Equipe iClinic DEV.

About

iClinic Node.js Challenge

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published