All Projects → gustavofreze → financial

gustavofreze / financial

Licence: MIT license
POC de uma aplicação de domínio financeiro.

Programming Languages

kotlin
9241 projects
shell
77523 projects
Makefile
30231 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to financial

EcommerceDDD
Experimental full-stack application using Domain-Driven Design, CQRS, and Event Sourcing.
Stars: ✭ 178 (+187.1%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing, clean-architecture
cqrs-event-sourcing-example
Example of a list-making Web API using CQRS, Event Sourcing and DDD.
Stars: ✭ 28 (-54.84%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing, hexagonal-architecture
educational-platform
Modular Monolith Java application with DDD
Stars: ✭ 124 (+100%)
Mutual labels:  cqrs, domain-driven-design, clean-architecture, hexagonal-architecture
Modular Monolith With Ddd
Full Modular Monolith application with Domain-Driven Design approach.
Stars: ✭ 6,210 (+9916.13%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing, clean-architecture
Dotnet New Caju
Learn Clean Architecture with .NET Core 3.0 🔥
Stars: ✭ 228 (+267.74%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing, clean-architecture
Event Sourcing Castanha
An Event Sourcing service template with DDD, TDD and SOLID. It has High Cohesion and Loose Coupling, it's a good start for your next Microservice application.
Stars: ✭ 68 (+9.68%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing, clean-architecture
Goes
Go Event Sourcing made easy
Stars: ✭ 144 (+132.26%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
Event Sourcing Jambo
An Hexagonal Architecture with DDD + Aggregates + Event Sourcing using .NET Core, Kafka e MongoDB (Blog Engine)
Stars: ✭ 159 (+156.45%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
eda
eda is a library for implementing event-driven architectures.
Stars: ✭ 31 (-50%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
microservice-template
📖 Nest.js based microservice repository template
Stars: ✭ 131 (+111.29%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
User Bundle
A new Symfony user bundle
Stars: ✭ 116 (+87.1%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
Revo
Event Sourcing, CQRS and DDD framework for C#/.NET Core.
Stars: ✭ 162 (+161.29%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
domain
A dependency-free package to help building a business domain layer
Stars: ✭ 33 (-46.77%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
Eventflow.example
DDD+CQRS+Event-sourcing examples using EventFlow following CQRS-ES architecture. It is configured with RabbitMQ, MongoDB(Snapshot store), PostgreSQL(Read store), EventStore(GES). It's targeted to .Net Core 2.2 and include docker compose file.
Stars: ✭ 131 (+111.29%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
Php Ddd Example
🐘🎯 Hexagonal Architecture + DDD + CQRS in PHP using Symfony 5
Stars: ✭ 1,960 (+3061.29%)
Mutual labels:  cqrs, domain-driven-design, hexagonal-architecture
Symfony Demo App
A Symfony demo application with basic user management
Stars: ✭ 122 (+96.77%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
Kreta
Modern project management solution
Stars: ✭ 177 (+185.48%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
Msgphp
Reusable domain layers. Shipped with industry standard infrastructure.
Stars: ✭ 182 (+193.55%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
Flux
A simple CQRS Framework for go
Stars: ✭ 206 (+232.26%)
Mutual labels:  cqrs, domain-driven-design, event-sourcing
repository
[PHP 7] Implementation and definition of a base Repository in Domain land.
Stars: ✭ 26 (-58.06%)
Mutual labels:  domain-driven-design, clean-architecture, hexagonal-architecture

Financial

Minimum Kotlin Version

Overview

A ideia deste projeto é aplicar o conteúdo estudado sobre Clean Architecture, Hexagonal Architecture, Domain-Driven Design, Event Sourcing, CQRS e Kafka.

Domínio

O domínio da aplicação é financial, que possui um subdomínio accounting. Dentro do subdomínio, temos dois contextos, account e bookkeeping.

Representação do domínio.
Representação do domínio.

Accounting

O Accounting (contabilidade) é o processo de registro de transações financeiras pertencentes a uma empresa.

Account

O contexto de account nada mais é do que uma conta contábil, que contém contas nas quais as informações sobre as transações de débitos e créditos são classificadas e resumidas.

Bookkeeping

O contexto de bookkeeping é o registro das transações financeiras, e envolve a preparação de documentos de origem para todas as transações, operações e outros eventos de uma empresa. As transações incluem compras, vendas, recebimentos e pagamentos por uma pessoa individual ou uma organização.

Arquitetura

A arquitetura da aplicação está dividida em alguns pilares, os quais delimitam os contextos.

Arquitetura do Financial.
Arquitetura do Financial.

Fluxo da aplicação.
Fluxo da aplicação.

  • Command

    Um comando é uma ordem para execução de algum caso de uso de negócio, eles geralmente resultam em eventos sendo emitidos.

  • Core

    É o núcleo da aplicação. Os objetos desta camada contém a lógica para manipular os casos de uso, que são específicos do próprio domínio. O core é independente dos processos de negócio que acionam essa lógica, são independentes e desconhecem completamente outras camadas.

  • Driven

    No driven estão os adaptadores de acionamento, os quais implementam as interfaces de saída da aplicação. Isso permite que o núcleo da aplicação exponha funcionalidades para o exterior.

  • Driver

    No driver estão os adaptadores primários que envolvem uma porta e a usam para informar ao core o que fazer. Eles traduzem tudo o que vem de um mecanismo de entrega em uma chamada de método no core.

  • Query

    Implementações das recuperações dos modelos de leitura.

Organização da aplicação

De forma geral, a aplicação está separada em quatro módulos:

application
┣ 📂account
┣ 📂bookkeeping
┣ 📂shared
┗ 📂starter

Account: Possui a lógica/regra de negócio do contexto de account.

Bookkeeping: Possui a lógica/regra de negócio do contexto de bookkeeping.

Shared: Possui implementações e interfaces comuns, que não detém lógica/regra de negócio. O conteúdo desse módulo pode ser convertido em várias bibliotecas.

Starter: Possui a inicialização dos componentes de plataforma usados pela aplicação, e as configurações de dependências da aplicação.

Casos de uso

Bookkeeping

No contexto de bookkeeping, quando uma operação contábil é registrada a partir de um comando RegisterFinancialTransaction, então um evento de TransactionRegistered ocorre, e é registrado no tópico financial.accounting.bookkeeping.transaction-registered. Apenas transações com valores maiores que R$ 0,00 são registradas.

O streaming dos dados é realizado usando o Kafka, onde foi utilizado o método de CDC, implementando uma abordagem utilizando logs.

Fluxo de CDC com o Kafka.
Fluxo de CDC com o Kafka.

Account

No contexto de account, uma política reage ao evento TransactionRegistered emitido pelo contexto de bookkeeping, o que resulta em um comando AdjustBalance, que faz a atualização dos saldos das contas.

Fluxo de produção e consumo do evento.
Fluxo de produção e consumo do evento.

Instalação

Repositório

Para clonar o repositório usando a linha de comando, execute:

> git clone https://github.com/gustavofreze/financial.git

Configuração

Verifique se algum processo usa as portas: 2181, 5432, 8080, 8081, 8083, 9000, 9001 e 9021. Se alguma das portas descritas estiver em uso, ela deve ser “liberada”.

Para instalar e configurar o projeto, execute na raiz do projeto:

> make configure

Roadmap

Verificando o ambiente

Para executar os casos de uso, basta estar com o ambiente docker inicializado.

Você pode conferir executando:

> docker ps --format "table {{.Names}}\t{{.Status}}"

Containers inicializados.
Containers inicializados.

E posteriormente verifique a aplicação executando:

> docker logs -f app

Aplicação pronta para executar os casos de uso.
Aplicação pronta para executar os casos de uso.

Executando os casos de uso

O primeiro comando a ser executado, pertence ao contexto de account. O comando ShowBalance exibe o saldo de todas as contas.

> make show-balance

Saldo inicial das contas.
Saldo inicial das contas.

O segundo comando a ser executado, pertence ao contexto de bookkeeping. O comando RegisterFinancialTransaction registra uma transação financeira.

> make register-financial-transaction

Transação financeira registrada.
Transação financeira registrada.

Após o comando RegisterFinancialTransaction ter sido executado, um evento TransactionRegistered é gerado, e enviado para o tópico no Kafka, através do processo de CDC, conforme explicado anteriormente.

No contexto de account, a política irá reagir ao evento TransactionRegistered, o que resulta na execução do comando AdjustBalance. O saldo é atualizado realizando uma operação de débito e crédito respectivamente. Mesmo se uma conta estiver com saldo de R$ 0,00 ou negativo, a operação é realizada.

Para conferir se o saldo foi atualizado, basta executar novamente o comando ShowBalance.

> make show-balance

Saldo atualizado das contas.
Saldo atualizado das contas.

Ainda no contexto de account, caso ocorra uma falha ao executar uma política, o evento desta política vai para uma fila de solução de problemas, de forma que é possível tentar novamente sua execução.

Essa fila de solução de problemas, é uma junção dos conceitos de troubleshooting e DLQ.

Para demonstrar na prática, existe um registro previamente registrado na fila troubleshooting. Para executar a política novamente a partir da fila de troubleshooting, é necessário executar o comando SolveFailures.

> make solve-failures

Execução da fila de troubleshooting.
Execução da fila de troubleshooting.

Com a política de atualizar saldo executada, o saldo das contas foi mais uma vez atualizado.

Para conferir se o saldo foi atualizado, basta executar novamente o comando ShowBalance.

> make show-balance

Saldo atualizado das contas, após a execução da política na fila de troubleshooting.
Saldo atualizado das contas, após a execução da política na fila de troubleshooting.

Testes

  • Executa todos os testes:

    > make test
  • Executa os testes unitários:

    > make unit-test
  • Executa os testes de integração:

    > make integration-test

Úteis

  • Para todos os containers do projeto:

    > make stop
  • Remove todos os containers e networks criados pelo projeto:

    > make clean
  • Remove todos os containers, networks e imagens criados pelo projeto:

    > make clean-all
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].