Skip to content

API do tipo REST para ser utilizada em um sistema de agendamentos, confira o README.

Notifications You must be signed in to change notification settings

lucasDechenier/api_schedule

Repository files navigation

REST API - Gerenciamento

Essa API tem como função requisições e respostas para um sistema de agendamentos

Tecnologias   |    Executando

🖥️ Implementações:

  • Agendamentos só podem ser feito entre as 9:00h e 16:00h.
  • O tempo médio para terminar um agendamento é de 40 minutos.
  • Agendamentos podem ser feitos a cada 10 minutos.
  • Só é possível cancelar um agendamento feito até 6 horas antes tanto pelo usuário, como operador
  • Existe um sistema de roles, onde existe o usuário e o operador.
  • Só podem existir 3 agendamentos ativos ocorrendo ao mesmo momento, no caso de agendamento futuros, caso em um intervalo de 40 minutos seja feito 3 agendamentos, o quarto agendamento não estará disponível e isso é obtido como resposta da requisição.

✈️ Rotas:

😁 Usuarios:

Utilize no Header de todas as rotas o Content-Type como application/json
  • Registro

    /user/register

    Deverá enviar um JSON da seguinte maneira:

    {
    "name": "Nome Desejado",
    "email": "email@extensãodoemail.com.br",
    "password": "senha123"
    }
    

    Como resposta irá obter o seguinte JSON com a senha já criptografada:

    {
    "admin": false,
    "_id": "60a272be07d02d3820b4646a",
    "name": "Nome Desejado",
    "email": "email@extensãodoemail.com.br",
    "password": "$2a$10$zA11xRZ9gSVw4sH3NXzl4.Jx1/nCwMJA0I7nGs/u6ZwhVeBM3MZz2",
    "createdAt": "2021-05-17T13:42:22.494Z",
    "__v": 0
    }
    
  • Login

    /user/login

    Deverá enviar um JSON da seguinte maneira:

    {
    "email": "email@extensãodoemail.com.br",
    "password": "senha123"
    }
    

    Em caso de sucesso receberá uma resposta que será o Token de autorização do usuário:

    {
    "authorizationToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGEyNzJiZTA3ZDAyZDM4MjBiNDY0NmEiLCJhZG1pbiI6ZmFsc2UsImlhdCI6MTYyMTI1OTE0MH0.RWKrh6ALvT2y9y1GApffrl6DPlSFkPjeHBryEqt5WMw"
    }
    

    Todas as rotas agora vão precisar receber no header o token dessa maneira:

      headers('authorization-token') = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGEyNzJiZTA3ZDAyZDM4MjBiNDY0NmEiLCJhZG1pbiI6ZmFsc2UsImlhdCI6MTYyMTI1OTE0MH0.RWKrh6ALvT2y9y1GApffrl6DPlSFkPjeHBryEqt5WMw"
    

    Caso utilize o insomnia, utilize a imagem abaixo, não passe o token entre aspas:

    header1

  • Agendar um atendimento

    /user/schedule

    Deverá enviar um JSON da seguinte maneira (lembre-se de enviar o token do usuário):

    {
     "startDay": 16,
     "startHour": 15,
     "startMinute": 50
    }
    
    • Os agendamentos só podem ser feitos de 10 em 10 minutos.

    • Só pode ser feito um agendamento no mesmo horário a não ser que seja feito por outro usuário.

    • Caso exista dentro de 40 minutos 3 agendamentos que vão ser realizados de forma simultânea, o quarto agendamento a tentar ser realizado não irá ser permitido.

      Como resposta irá obter o seguinte JSON com a senha já criptografada:

      {
      "admin": false,
      "_id": "60a272be07d02d3820b4646a",
      "name": "Nome Desejado",
      "email": "email@extensãodoemail.com.br",
      "password": "$2a$10$zA11xRZ9gSVw4sH3NXzl4.Jx1/nCwMJA0I7nGs/u6ZwhVeBM3MZz2",
      "createdAt": "2021-05-17T13:42:22.494Z",
      "__v": 0
      }
      
  • Ver tarefas agendadas

    /user/viewSchedule

    Deverá enviar via header o token do usuário que deseja ver suas tarefas:

    headers('authorization-token') = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGEyNzJiZTA3ZDAyZDM4MjBiNDY0NmEiLCJhZG1pbiI6ZmFsc2UsImlhdCI6MTYyMTI1OTE0MH0.RWKrh6ALvT2y9y1GApffrl6DPlSFkPjeHBryEqt5WMw"
    
    • Os agendamentos só podem ser vistos por cada usuário, ou seja, um usuário não tem permissão para ver agendamento de outro.

      Como resposta irá obter o seguinte JSON com as tarefas do usuário:

      [{
      "_id": "60a27add50c3592a4c09276c",
      "userId": "60a272be07d02d3820b4646a",
      "startDay": 16,
      "startHour": 15,
      "startMinute": 50,
      "__v": 0
      },
      {
      "_id": "60a27ae450c3592a4c09276d",
      "userId": "60a272be07d02d3820b4646a",
      "startDay": 16,
      "startHour": 15,
      "startMinute": 0,
      "__v": 0
      },
      {
      "_id": "60a27ae850c3592a4c09276e",
      "userId": "60a272be07d02d3820b4646a",
      "startDay": 16,
      "startHour": 15,
      "startMinute": 10,
      "__v": 0
      }]
    
  • Cancelar uma tarefa já agendada

    /user/cancel/schedule

    Deverá enviar um JSON contendo o id da tarefa a ser deletada da seguinte forma (lembre-se de enviar o token do usuário):

    {
    "id": "60a026f6d1f40a0e00e0a8bd"
    }
    
    • Só se pode cancelar um agendamento que existe.
    • Os agendamentos só podem ser cancelados por aquele usuário que o criou, ou seja, não é permitido cancelar agendamento de outro usuário pela rota USER.
    • O cancelamento só pode ser feito até 6 horas antes da tarefa se iniciar.

    Como resposta irá obter o id da tarefa que foi cancelada com status 200:

    60a026f6d1f40a0e00e0a8bd
    

    Caso não tenha sucesso, irá receber respostas diferentes a depender do erro encontrado.

 

🔐 Administradores:

Utilize no Header de todas as rotas o Content-Type como application/json

Existe apenas um usuário presente no banco de dados para teste, ele é da seguinte forma:

{
"email": "[email protected]",
"password": "admin123"
}

O registro foi feito diretamente no banco de dados por questões de segurança, abaixo seguem as rotas disponíveis:

  • Login

    /admin/login

    Deverá enviar um JSON da seguinte maneira:

    {
      "email": "[email protected]",
      "password": "admin123"
    }
    

    Em caso de sucesso receberá uma resposta que será o Token de autorização do usuário:

    {
    "authorizationToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGEyN2RhNzUwYzM1OTJhNGMwOTI3NmYiLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNjIxMjYxODEwfQ.KLct0pGR5OFEr1G9tffM2qTXNaWrgsJqH0KnOm1Is3w"
    }
    

    Todas as rotas agora vão precisar receber no header o token dessa maneira:

      headers('authorization-token') = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGEyNzJiZTA3ZDAyZDM4MjBiNDY0NmEiLCJhZG1pbiI6ZmFsc2UsImlhdCI6MTYyMTI1OTE0MH0.RWKrh6ALvT2y9y1GApffrl6DPlSFkPjeHBryEqt5WMw"
    

    Caso utilize o insomnia, utilize a imagem abaixo, não passe o token entre aspas:

    header1

  • Ver tarefas agendadas

    /admin/viewSchedule)

    Deverá enviar via header o token do administrador/operador que deseja ver as tarefas que estão agendadas no sistema:

    headers('authorization-token') = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MGEyNzJiZTA3ZDAyZDM4MjBiNDY0NmEiLCJhZG1pbiI6ZmFsc2UsImlhdCI6MTYyMTI1OTE0MH0.RWKrh6ALvT2y9y1GApffrl6DPlSFkPjeHBryEqt5WMw"
    
    • O operador do sistema pode ver o agendamento de todos os usuários.

    Como resposta irá obter o seguinte JSON com as tarefas de todos os usuários:

      [{
      "_id": "60a2781207d02d3820b4646b",
      "userId": "60a14e0ec263702c28789b23",
      "startDay": 16,
      "startHour": 15,
      "startMinute": 50,
      "__v": 0
      },
      {
      "_id": "60a27add50c3592a4c09276c",
      "userId": "60a272be07d02d3820b4646a",
      "startDay": 16,
      "startHour": 15,
      "startMinute": 50,
      "__v": 0
      }]
    
  • Cancelar uma tarefa já agendada

    /admin/cancel/schedule

    Deverá enviar um JSON contendo o id da tarefa a ser deletada da seguinte forma (lembre-se de enviar o token do usuário):

    {
    "id": "60a14fc71d2de14ba07c095b"
    }
    
    • Só se pode cancelar um agendamento que existe.

    • Pela rota admin, o operador pode realizar o cancelamento de qualquer usuário, não há restrição.

    • O cancelamento só pode ser feito até 6 horas antes da tarefa se iniciar.

    Como resposta irá obter o id da tarefa que foi cancelada com status 200:

    60a14fc71d2de14ba07c095b
    

    Caso não tenha sucesso, irá receber respostas diferentes a depender do erro encontrado.

  • Completar uma tarefa, serviço terminado

    admin/Complete/schedule

    Deverá enviar um JSON contendo o id da tarefa a que deseja ser completada (lembre-se de enviar o token do usuário):

    {
    "id": "60a14fc71d2de14ba07c095b"
    }
    
    • Só se pode completar uma tarefa que já foi iniciada.

    Como resposta irá obter o id da tarefa que foi cancelada com status 200:

    60a27add50c3592a4c09276c
    

    Caso não tenha sucesso, irá receber respostas diferentes a depender do erro encontrado.

🧪 Tecnologias

JavaScript NodeJS

🔨 Dependências

Banco de dados (Está em núvem)
Depedências

🚀 Executando

Clone o projeto e acesso a pasta dos arquivos

$ git clone https://github.com/lucasDechenier/api_schedule

Siga as etapas para instalação

# Instalando as dependências
$ npm install

# Iniciando o projeto
$ npm start

About

API do tipo REST para ser utilizada em um sistema de agendamentos, confira o README.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published