Solução de um desafio proposto no curso Persistência poliglota com PHP: Implementando buscas, mensageria, bancos de dados de grafos e colunares da Alura
- PHP
- Docker
- MongoDB
- ElasticSearch
- RabbitMQ
- Neo4J
- Docker
- Docker Compose
Na raiz do projeto, execute:
docker compose up -dIsso irá iniciar todos os serviços necessários e estará disponível em:
http://localhost:8080
Para parar todos os serviços:
docker compose downPara popular o banco com usuários iniciais:
docker compose exec php php seed-users.phpEsse endpoint POST deve receber como payload um JSON contendo quaisquer campos,
porém um campo nome deve ser obrigatório. Esses campos precisam ser salvos no
MongoDB. Além disso, o nome e ID devem ser indexados no ElasticSearch para buscas
textuais além de serem salvos como um novo nó no Neo4J para que compras possam ser
salvas futuramente.
POST /product.php
{
"name": "<name>",
"description": "<description>",
"price": <price>
}
Esse endpoint GET deve receber um parâmetro busca na URL e realizar uma busca
textual no ElasticSearch com esse termo, retornando o nome e o ID do produto
GET /search-products.php?q=<search>
Esse endpoint POST deve receber como payload um JSON contendo o ID do produto
e o nome de um usuário que está realizando a compra. Essa compra deve ser inserida
como um relacionamento no Neo4J. Além disso, uma mensagem deve ser enviada para o
RabbitMQ informando a compra do produto. Não precisa criar um consumidor para essas
mensagens.
POST /buy-product.php
{
"id_product": "<id>",
"username": "<user>"
}
Esse endpoint GET deve receber um parâmetro usuario na URL e exibir os produtos
recomendados para ele.
GET /recommended-products.php?user=<user>