Desafio da empresa Dito. Este repositório possui um docker-compose onde todos os entregáveis estão disponibilizados via imagens. Desta forma é bem fácil subir os serviços e validar o que foi feito em qualquer máquina que possua Docker e docker-compose instalado.
- Máquina deve ter no mínimo 4GB de RAM para aguentar rodar as ferramentas utilizadas.
- Docker instalado
- docker-compose instalado
- Preferencialmente máquinas Linux (Ubuntu, Debian, CentOS)
- Clonar o repositório
https://github.com/lcastrooliveira/dito-docker-compose.git
- Navegar até a pasta do projeto
cd dito-docker-compose
- Subir os serviços
docker-compose up
Na API coletora de eventos:
POST localhost:8080/api/v1/events
Usado para endpoint utilizado para publicar um evento. Exemplo de evento:
{
"event": "buy",
"timestamp": "2023-09-22T13:57:31.2311892-03:00",
"revenue": 123.89
}
E na API consumidora de eventos:
GET localhost:8081/api/v1/eventsapi/v1/events?eventName=<searchTerm>&page=<pageIndex>&size=<pageSize>
Usado para buscar as informações de eventos cadastradas (autocomplete). Parâmetros:
- eventName (obrigatório): termo de busca para o campo
event
. Mínimo 2 caracteres. - Page (opcional): Número da página, caso não fornecido assume-se valor 0.
- Size (opcional): Tamanho da página, caso não fornecido assume-se valor 20.
POST localhost:8082/api/v1/timeline
Usado para endpoint utilizado para mandar uma lista de eventos, por exemplo:
{
"events":[
{
"event":"comprou-produto",
"timestamp":"2016-09-22T13:57:32.2311892-03:00",
"custom_data":[
{
"key":"product_name",
"value":"Camisa Azul"
},
{
"key":"transaction_id",
"value":"3029384"
},
{
"key":"product_price",
"value":100
}
]
},
{
"event":"comprou",
"timestamp":"2016-09-22T13:57:31.2311892-03:00",
"revenue":250,
"custom_data":[
{
"key":"store_name",
"value":"Patio Savassi"
},
{
"key":"transaction_id",
"value":"3029384"
}
]
},
{
"event":"comprou-produto",
"timestamp":"2016-09-22T13:57:33.2311892-03:00",
"custom_data":[
{
"key":"product_price",
"value":150
},
{
"key":"transaction_id",
"value":"3029384"
},
{
"key":"product_name",
"value":"Calça Rosa"
}
]
},
{
"event":"comprou-produto",
"timestamp":"2016-10-02T11:37:35.2300892-03:00",
"custom_data":[
{
"key":"transaction_id",
"value":"3409340"
},
{
"key":"product_name",
"value":"Tenis Preto"
},
{
"key":"product_price",
"value":120
}
]
},
{
"event":"comprou",
"timestamp":"2016-10-02T11:37:31.2300892-03:00",
"revenue":120,
"custom_data":[
{
"key":"transaction_id",
"value":"3409340"
},
{
"key":"store_name",
"value":"BH Shopping"
}
]
}
]
}
Resultado: Eventos agrupados por ID de transação. Em que cada item corresponde a uma compra realizada em um estabelicimento. As infomrações são ordenadas em ordem decrescente:
{
"timeline": [
{
"timestamp": "2016-10-02T14:37:31.2300892Z",
"revenue": 120,
"transaction_id": "3409340",
"store_name": "BH Shopping",
"products": [
{
"name": "Tenis Preto",
"price": 120
}
]
},
{
"timestamp": "2016-09-22T16:57:31.2311892Z",
"revenue": 250,
"transaction_id": "3029384",
"store_name": "Patio Savassi",
"products": [
{
"name": "Camisa Azul",
"price": 100
},
{
"name": "Calça Rosa",
"price": 150
}
]
}
]
}
- Java 8 com Spring Boot 2
- Apache Kafka
- Elasticsearch
- Docker
- Dito Producer - API que publica os dados
- Dito Consumer - API que consume os dados
- Dito Data Manipulation - API que cria uma timeline baseados nos eventos de entrada
- Intro to Apache Kafka with Spring
- Intro to Apache Kafka with Spring
- Introduction to Spring Data Elasticsearch
- Fabric 8 Maven Plugin for Docker