Este repositório contém um exemplo de implementação de Event Sourcing usando ASP.NET Core e SQLite. O projeto demonstra como criar, armazenar e recuperar eventos relacionados a contas bancárias, além de calcular o saldo atual de uma conta.
Event Sourcing é um padrão de design onde as mudanças no estado de um aplicativo são armazenadas como uma sequência de eventos. Este exemplo mostra como implementar Event Sourcing em uma aplicação ASP.NET Core com um banco de dados SQLite.
- Criação de contas bancárias
- Depósito de dinheiro
- Saque de dinheiro
- Recuperação do saldo atual da conta
- Persistência de eventos em banco de dados SQLite
Controllers
: Contém os controladores da APIEvents
: Define os eventos utilizados no Event SourcingAggregates
: Define os agregados (entidades) do domínioRepositories
: Contém a lógica para armazenamento e recuperação dos eventosData
: Configurações do Entity Framework Core
git clone https://github.com/seu-usuario/event-sourcing-example.git
cd event-sourcing-example
No arquivo appsettings.json
, configure a string de conexão para o SQLite:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=eventsourcing.db"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Para garantir que o banco de dados e as tabelas necessárias sejam criados, execute as migrações:
dotnet ef migrations add InitialCreate
dotnet ef database update
Para executar a aplicação:
dotnet run
A aplicação estará disponível em https://localhost:5001
e a interface do Swagger pode ser acessada em https://localhost:5001/swagger
.
POST /api/BankAccount
Corpo da Requisição:
{
"accountId": "GUID"
}
POST /api/BankAccount/{accountId}/deposit
Corpo da Requisição:
{
"amount": 100.0
}
POST /api/BankAccount/{accountId}/withdraw
Corpo da Requisição:
{
"amount": 50.0
}
GET /api/BankAccount/{accountId}/balance
Resposta:
{
"accountId": "GUID",
"balance": 50.0
}
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.
Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.