/desafio-mock-server

Mock API do desafio da Intmed para facilitar o desenvolvimento do desafio frontend

Primary LanguageJavaScript

Desafio Intmed - API Mock

Aplicacao Nodejs para servir os endpoints da API do Medicar de forma mocada para facilitar o desenvolvimento do desafio frotend.

Instalacao

Para instalar os pacotes necessários da aplicação, basta rodar o seguinte comando no seu terminal:

$ npm install

Apos a instalação dos pacotes ser concluída, inicie a aplicação com o seguinte comando:

$ npm run start

Com isso, a aplicação estará rodando na porta 3000

Autenticação

Para que seja possível utilizar os endpoints, é necessário primeiramente obter um token de acesso através do seguinte endpoint via POST:

POST /users/login

Passando os seguintes dados de autenticação:

{
  "username": "intmed",
  "password": "challenge"
}

Com isso, a API retornará um token de acesso que deverá ser utilizado na chamada dos endpoints de consultas, medicos, agendas e especialidades.

{
  "token": "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"
}

Para realizar a chamada dos endpoints mencionados anteriormente, deverá ser passado um header de autorizacao (Authorization) na chamada HTTP no seguinte formato:

Authorization   Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

Endpoints

Login

Endpoint responsável por retornar um token de acesso à API

Requisição

POST /users/login
{
  "username": <string>,
  "password": <string>
}

Cadastro

Endpoint responsável por cadastrar um novo usuário no Medicar (O valor de retorno é mockado, retornando sempre o mesmo usuário).

POST /users
{
  "username": <string>,
  "email": <string>,
  "password": <string>
}

Listar especialidades médicas

Lista todas as especialidades médicas disponíveis na clínica

Requisição

GET /especialidades/

Resposta

[
    {
      "id": 1,
      "nome": "Pediatria"
    },
    {
      "id": 2,
      "nome": "Ginecologia"
    },
    {
      "id": 3,
      "nome": "Cardiologia"
    },
    {
      "id": 4,
      "nome": "Clínico Geral"
    }
]

Filtros

  • Nome da especialidade (termo de pesquisa)
GET /especialidades/?search=ped

Listar médicos

Lista todos os médicos que atendem pela clínica

Requisição

GET /medicos/

Retorno

[
    {
      "id": 1,
      "crm": 3711,
      "nome": "Drauzio Varella",
      "especialidade": {
            "id":2,
            "nome": "Pediatria"
        }
    },
    {
      "id": 2,
      "crm": 2544,
      "nome": "Gregory House",
      "especialidade": {
          "id": 3,
          "nome": "Cardiologia"
        }
    },
    {
      "id": 3,
      "crm": 3087,
      "nome": "Tony Tony Chopper",
      "especialidade": {
            "id":2,
            "nome": "Pediatria"
        }
    }
]

Filtros

  • Identificador de uma ou mais especialidades
  • Nome do médico (termo de pesquisa)
GET /medicos/?search=maria&especialidade=1&especialidade=3

Listar consultas marcadas

Lista todas as consultas marcadas do usuário logado

Requisição

GET /consultas/

Retorno

[
    {
      "id": 1,
      "dia": "2020-02-05",
      "horario": "12:00",
      "data_agendamento": "2020-02-01T10:45:0-03:00",
      "medico": {
        "id": 2,
        "crm": 2544,
        "nome": "Gregory House",
        "especialidade": {
          "id": 3,
          "nome": "Cardiologia"
        }
      }
    },
    {
      "id": 2,
      "dia": "2020-03-01",
      "horario": "09:00",
      "data_agendamento": "2020-02-01T10:45:0-03:00",
      "medico": {
        "id": 1,
        "crm": 3711,
        "nome": "Drauzio Varella",
        "especialidade": {
            "id":2,
            "nome": "Pediatria"
        }
      }
    }
]

Listar agendas disponíveis

Lista todas as agendas disponíveis na clínica

[
    {
      "id": 1,
      "medico": {
        "id": 3,
        "crm": 3087,
        "nome": "Tony Tony Chopper",
        "especialidade": {
            "id":2,
            "nome": "Pediatria"
        }
      },
      "dia": "2020-02-10",
      "horarios": ["14:00", "14:15", "16:00"]
    },
    {
      "id": 2,
      "medico": {
        "id": 2,
        "crm": 2544,
        "nome": "Gregory House",
        "especialidade": {
          "id": 3,
          "nome": "Cardiologia"
        }
      },
      "dia": "2020-02-10",
      "horarios": ["08:00", "08:30", "09:00", "09:30", "14:00"]
    }
]

Filtros

  • Identificador de um ou mais médicos
  • Identificador de uma ou mais especialidades
  • Intervalo de data
GET /agendas/?medico=1&especialidade=2&data_inicio=2020-01-01&data_final=2020-01-05

Marcar consulta

Marca uma consulta para o usuário logado

Requisição

POST /consultas/
{
  "agenda_id": 1,
  "horario": "14:15"
}

Retorno

{
  "id": 2,
  "dia": "2020-03-01",
  "horario": "09:00",
  "data_agendamento": "2020-02-01T10:45:0-03:00",
  "medico": {
    "id": 1,
    "crm": 3711,
    "nome": "Drauzio Varella",
    "especialidade": {
            "id":2,
            "nome": "Pediatria"
        }
  }
}

Desmarcar consulta

Desmarca uma consulta marcada pelo usuário

Requisição

DELETE /consultas/<consulta_id>

Retorno

Não há retorno (vazio)