Skip to content

expoure/transaction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pismo - Rotina de Transações

Index

Executando

Variáveis de ambiente

Certifique-se que as variáveis de ambiente utilizadas, especialmente aquelas que dizem respeito às portas, não irão conflitar com algum outro serviço da sua máquina. os arquivos podem ser encontrados em: services/*/.env.

Makefile

O comando abaixo irá subir todos os serviços docker necessários:

make up-all

Prefiro eu mesmo fazer

Caso prefira subir o ambiente sem o Makefile acima:

docker network create internal-net
docker compose up -d --scale kafkaui=0 --scale db-test=0

Dessa forma, a rede docker que o projeto necessita será criada e o container do kafka-ui e do banco de teste serão ignorados, uma vez que estão presentes no projeto apenas para acompanhamento do fluxo de eventos e para a execução dos testes de integração.

Utilizando as APIs

Você pode importar a collection do Insomnia localizado neste repositório ou utilizar os comandos abaixo direto no terminal. Necessita de curl instalado!

Criando account

curl --request POST \
  --url https://localhost:8080/v1/accounts \
  --header 'Content-Type: application/json' \
  --data '{
	"documentNumber": "12348378734"
}'

Buscando account por id

curl --request GET \
  --url https://localhost:8080/v1/accounts/seu-uuid-aqui

Criando transaction para account

curl --request POST \
  --url https://localhost:8080/v1/transactions \
  --header 'Content-Type: application/json' \
  --data '{
	"accountId": "seu-uuid-aqui",
	"operationTypeId": 1,
	"amount": -5.00
}'

Testes:

Integração com db:

make run-db-tests

Unitários:

make run-unit-tests

Arquitetura

image info

Tecnologias usadas

  • Docker
  • Golang (1.20)
  • Kafka
  • Postgres
  • Krakend API-Gateway
  • sqlc + pgx/v5
  • gomock(uber)

Escolhas técnicas

Hexagonal

Este design de arquitetura nos ajuda com a testabilidade e flexibilidade da nossa aplicação, possibilitando uma atenção maior ao seu domínio sem preocupações com o que está fora dele.

Microservice

Arquitetura escolhida pela escabilidade, modularidade, elasticidade, tolerância a falhas, testabilidade e confiabilidade.

Api-Gateway

Uma Api-Gateway entrega muitas vantagens, neste pequeno projeto serve para direcionar as requests para o microservice adequado.

Dinheiro do tipo...INTEGER!

Como estamos lidando com real e centavos (ou quaisquer que sejam os equivalentes), e eles geralmente são representados por um número decimal, pode parecer óbvio usar float ou decimal, pois eles são projetados para representar números que incluem casas decimais. No entanto, se você entender um pouco sobre como float funciona no nível do hardware, verá por que essa não é a melhor abordagem.

image info

Você pode rodar o exemplo aqui e também ler mais informações neste ótimo artigo.

Event-Driven

Trabalhar com microservices pode ser muito complexo dependendo do domínio da aplicação. Um dos grandes problemas desta arquitetura são as chamadas síncronas entre serviços, que podem gerar lentidão no sistema como um todo ou folharem devido a problemas de rede. Event-Driven é descrito por Mark Richards e Neal Ford em Fundamentals of Software Architecture: An Engineering Approach como uma arquitetura. Nesta arquitetura, cada ação gera um evento e este será usado por outra ação que também irá gerar um evento e assim por diante.

Devido a esta característica, microservices "casam" bem como uma arquitetura baseada em eventos, pois os erros de rede são drasticamente diminuídos e tudo acontece de forma assíncrona.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published