Um projeto de agendamento para envio de carga de comunicação, desenvolvido em Java.
- 1.0.0 -> Desenvolvido em cima de um monolito.
- 2.0.0 -> Desenvolvido em microserviços, mas eu não subi na branch Master para não sobrescrever o que foi solicitado, entretanto, caso queira validar o desenvolvimento do mesmo clique aqui. Nesse branch eu utilizo RabbitMQ e Google Protocol Buffer para realizar a comunicação entre os serviços internos, dessa maneira a API fica disponível para usuários finais e caso o meu coleguinha queira utilizar o mesmo serviço, ele pode realizar a comunicação internamente.
Spring boot
- Framework de desenvolvimento Java.PostgreSQL
- Banco de dados.JPA/Hibernate
- Framework para persistência de dados / ORM.Docker
- Executa aplicações dentro de invólucros chamados containers.jUnit5 e Mockito
- Framework para execução de testes.H2 Database Engine
- Banco de dados executado em memória, utilizado nos testes.- Swagger - Framework para documentação da API.
É necessário ter instalado na sua máquina os seguintes programas:
- O Gerenciador de dependências do Java, Gradle, caso ele não esteja instalado, siga o tutorial do próprio site: Gradle install.
- Aplicação de containers, neste projeto é o Docker, caso ele não esteja instalado, siga o tutorial do próprio site: Get Docker.
Abra o seu terminal e faça o clone do repositório através do seguinte comando:
git clone https://github.com/lin-br/labs-scheduler.git
Após completar o download dos arquivos, acesso o diretório que foi criado:
cd ./labs-scheduler/
E execute o seguinte comando para realizar a instalação das dependências do aplicativo:
./gradlew clean build
Agora execute o seguinte comando para realizar a construção do aplicativo:
Ps: Tenha certeza de que na sua máquina o Docker está ligado.
docker build -t linbr/scheduler .
Por último, mas não menos importante, vamos iniciar o Schedule API:
Ps: Caso ocorra algum erro nesse momento, verifique se possui algum aplicativo na sua máquina que esteja a utilizar a porta
8080
ou5432
. Caso não possua conhecimento para tal procedimento, tente reiniciar a máquina e então voltar a executar o Schedule API.
docker-compose up
São:
- Para cadastro de agendamento: POST http://localhost:8080/api/schedules
- Para consulta de agendamento: GET http://localhost:8080/api/schedules/{id}
- Para exclusão de agendamento: DELETE http://localhost:8080/api/schedules/{id}
É possível consulta-los pelo endpoint da documentação via Swagger.
É possível enviar requisições através de um aplicativo como o POSTMAN que pode instalar na máquina ou uma extensão no navegador e realiza requisições para um URL. Outra opção é enviar comandos através do famoso cURL, neste caso, é o modo que adotarei. Para testes e usos em casos reais, utilizo e recomendo fortemente o POSTMAN.
URL: http://localhost:8080/api/schedules
- Observação: Foi adicionado uma validação entre o destinatário e o tipo enviado:
- Para
EMAIL
: o campo destinatário precisa possuir um e-mail válido. - Para
WHATSAPP
eSMS
: o campo destinatário precisa possuir somente números e mais do que 9 caracteres.
- Para
Vai cadastrar um agendamento
com a data de envio em 07 de Dezembro de 2020 às 17:40 horas
,
para o destinatário [email protected]
, com a mensagem teste 1
e o tipo de envio para email
.
curl -X POST \
'http://localhost:8080/api/schedules' \
-H 'Content-Type: application/json' \
-d '{"date":"2020-12-07 17:40:00","recipient":"[email protected]","message":"teste 1","type":"EMAIL"}'
Quando realizamos uma requisição POST para uma API Restful, o método retorna um header chamado
Location
que possui a URL de consulta para aquela nova entidade que foi criada. Para pegar o headerLocation
envie o seguinte comando:
curl -i -X POST \
'http://localhost:8080/api/schedules' \
-H 'Content-Type: application/json' \
-d '{"date":"2020-12-07 17:40:00","recipient":"[email protected]","message":"teste 1","type":"EMAIL"}'
Exemplo de resposta:
HTTP/1.1 201
Location: http://localhost:8080/api/schedules/ef51a952-f891-43da-a7f1-87a4c1d2c54b
Content-Length: 0
Date: Sat, 08 Aug 2020 19:08:04 GMT
URL: http://localhost:8080/api/schedules/{id} Exemplo de comando:
curl GET 'http://localhost:8080/api/schedules/6e7876f2-6139-47e2-a618-c927f0819df9'
URL: http://localhost:8080/api/schedules/{id} Exemplo de comando:
curl DELETE 'http://localhost:8080/api/schedules/6e7876f2-6139-47e2-a618-c927f0819df9'