Este repositório foi criado para cumprir o desafio da trilha Event Driven Architecture do curso Full Cycle 3.0
Para executar este projeto, acesse a pasta raiz do projeto através do terminal e então execute:
$ docker compose up -d
Na inicialização, serão criadas duas instâncias do MySQL, cada um com um banco de dados:
walletcore
: Persiste os dados de clientes e contas bancárias.transactions
: Persiste os dados de transações bancárias.
O banco de dados walletcore
será previamente preenchidos com alguns dados de clientes e contas bancárias.
Para consultar os clientes disponíveis, execute a requisição denominada listCustomers no arquivo api.http
, localizado na pasta api
relativa à raiz do projeto. A resposta dessa requisição será um documento JSON com a lista de todos os clientes disponíveis.
{
"customers": [
{
"id": "a9ef943d-39e7-11ee-b8f7-0242ac120004",
"name": "Josimar Zimermann",
"email": "josimarz@yahoo.com.br",
"createdAt": "2023-08-13T14:42:44Z",
"updatedAt": "2023-08-13T14:42:44Z"
},
{
"id": "a9f1a411-39e7-11ee-b8f7-0242ac120004",
"name": "Gustavo Kuerten",
"email": "guga@tennis.com",
"createdAt": "2023-08-13T14:42:44Z",
"updatedAt": "2023-08-13T14:42:44Z"
},
{
"id": "a9f30a18-39e7-11ee-b8f7-0242ac120004",
"name": "Ana Ivanovic",
"email": "ivanovic@wta.com",
"createdAt": "2023-08-13T14:42:44Z",
"updatedAt": "2023-08-13T14:42:44Z"
},
{
"id": "a9f493fd-39e7-11ee-b8f7-0242ac120004",
"name": "Maria Sharapova",
"email": "sharapova@wta.com",
"createdAt": "2023-08-13T14:42:44Z",
"updatedAt": "2023-08-13T14:42:44Z"
}
]
}
Copie o id
do cliente desejado para consultar as contas desse cliente.
Ainda no arquivo api.http
, utilize a requisição denominada listCustomerAccounts
para consultar as contas vinculadas com um determinado cliente. Na URL da requisição, substitua o id
de exemplo pelo id
do cliente desejado. A resposta da requisição será uma lista com as contas vinculadas ao cliente.
{
"accounts": [
{
"id": "a9f80299-39e7-11ee-b8f7-0242ac120004",
"balance": 500,
"createdAt": "2023-08-13T14:42:44Z",
"updatedAt": "2023-08-13T14:42:44Z"
}
]
}
Para efetuar uma transação, no arquivo api.http
procure pela requisição denominada createTransaction
. No corpo da requisição atribua para o campo from
o id
da conta de origem, isto é, a conta da qual o valor será debitado. Para o campo to
, atribua o id
da conta de destino, isto é, a conta na qual o valor será creditado. No campo amount
, informe o valor da operação. Esta requisição retorna uma resposta vazia, isto é, 204
.
Sempre que uma transação é criada, uma nova mensagem é enviada para o tópico transactions
do Apache Kafka. As mensagens enviadas para esse tópico são consumidas pelo microsserviço transactions
. O microsserviço transactions
, por sua vez, cria um novo registro de transação no banco de dados e emite uma mensagem para o tópico balances
do Apache Kafka. As mensagens enviadas para o tópico balances
são consumidas pelo serviço walletcore
que efetua a atualização dos balanços da conta envolvidas na transação.
Para consultar o balanço atualizado das contas envolvidas na transação, utilize a requisição denominada showAccountBalance
, disponível no arquivo api.http
. A resposta da requisição será um documento JSON exibindo a condição atual da conta.