Criação de 3 endpoints relativos ao envio de comunicação:
- Agendamento de envio de comunicação;
- Consulta do envio da comunicação;
- Cancelamento do envio da comunicação.
Para implementação do projeto, foram assumidas as seguintes representações para as variáveis de domínio:
- Formatos de Comunicação: { email: 1, sms: 2, push: 3, whatsapp: 4 }
- Status de Comunicação: { waiting: 1, sent: 2, cancelled: 3 }
-
Toda solicitação de agendamento bem sucedida retorna como reposta da requisição um token único (RFC4122); este token é utilizado nas etapas de consulta e cancelamento de agendamento comunicação.
-
Para meios de simplificação, o identificador escolhido para o destinatário foi o e-mail, que pode ser um identificador único e pouco invasivo.
-
Status e Tipo de entrega foram definidos como inteiros considerando que ambos os conjuntos tendem a ser mantidos pequenos, alémde facilitar as operações de atualização dos registros (Mudanças de status para cancelamento e confirmação de envio).
JavaScript (Node)
MySQL
-
Utilizando a CLI ou ferramenta gráfica, execute o script create_database.sql, que se encontra na pasta database.
-
Crie um arquivo chamado config.env dentro da pasta communication_backend. Este arquivo deve armazenar informações sensiveis que não devem estar no repositório. Necessariamente deve conter as propriedades:
SERVER_PORT=3000
DATABASE_HOST=Endereço IP do host. Para testar com Docker, utilizar: host.docker.internal
DATABASE_USER=usuario autorizado com as operações CRUD no banco de dados criado
DATABASE_PASSWORD=senha do usuário
DATABASE_NAME=dbcommunication
DATABASE_CONNECTION_LIMIT=Número inteiro referente ao máximos de conexões permitidas (Utilizado o valor 5 durantes os testes)
-
Para executar localmente:
No contexto do diretório communication_backend execute o comando npm install para obter as dependências.
No contexto do diretório communication_backend execute o comando npm start
-
Para executar com Docker:
No contexto do diretório communication_backend execute o comando docker-compose up
- No contexto do diretório communication_backend execute o comando npm test para executar a suíte de testes. Os testes criados foram:
Receive Valid Token using % as delivery type: Verifica se um token de confirmação válido é devolvido para solicitações envolvendo todos os tipos de comunicação do escopo (endpoint 1).
Refuse invalid e-mail: Verifica se o endpoint 1 está respondendo com mensagem de erro para os casos onde o e-mail enviado não corresponde ao padrão de validação básica.
Refuse invalid date: Verifica se o endpoint 1 está respondendo com mensagem de erro para os casos onde a data de agendamento enviada não corresponde a uma data válida no formato ISO8601.
Refuse invalid message: Verifica se o endpoint 1 está respondendo com mensagem de erro para os casos onde a mensagem enviada não corresponde ao padrão de validação básica (Mínimo de 10 caracteres).
Refuse invalid delivery type: Verifica se o endpoint 1 está respondendo com mensagem de erro para os casos onde o formato de comunicação não é válido (email: 1, sms: 2, push: 3, whatsapp: 4).
Check if status of a new communication request equals to waiting: Verifica se o endpoint 2 está respondendo com o status waiting para mensagens recem criadas.
Refuse check without token: Verifica se o endpoint 2 está retornando erro 500 para requisições que não contenham token de verificação.
Refuse check with invalid token: Verifica se o endpoint 2 está retornando erro 500 para requisições que não contenham token válido de verificação (RFC4122).
Check if status of a cancelled communication equals to cancelled: Verifica se o endpoint 3 está alterando o status da solicitação de comunicação para cancelled (3).
Refuse cancellation without token:Verifica se o endpoint 3 está retornando erro 500 para requisições que não contenham token de verificação.
Refuse cancellation without token: Verifica se o endpoint 3 está retornando erro 500 para requisições que não contenham token válido de verificação (RFC4122).
-
Endpoint 1:
Método: POST
Endereço: http://127.0.0.1:3000/communicationrequest/register
Corpo da request: {"deliveryTime": "2022-05-10T01:00:00.000Z", "receiverEmail": "fulano@hotmail.com", "message": "No minimo 10 caracteres", "deliveryType": 1}
-
Endpoint 2:
Método: POST
Endereço: http://127.0.0.1:3000/communicationrequest/check
Corpo da request: { "communicationRequestToken":"f8947372-05ca-47f1-ac4a-1711493f573c" }
-
Endpoint 3:
Método: POST
Endereço: http://127.0.0.1:3000/communicationrequest/cancel
Corpo da request: { "communicationRequestToken":"f8947372-05ca-47f1-ac4a-1711493f573c" }
-
Docker:
SERVER_PORT=3000
DATABASE_HOST= host.docker.internal
DATABASE_USER=root
DATABASE_PASSWORD=root
DATABASE_NAME=dbcommunication
DATABASE_CONNECTION_LIMIT=5
-
Localhost:
SERVER_PORT=3000
DATABASE_HOST=127.0.0.1
DATABASE_USER=root
DATABASE_PASSWORD=root
DATABASE_NAME=dbcommunication
DATABASE_CONNECTION_LIMIT=5