{"id":16990387,"url":"https://github.com/mizrael/supersafebank","last_synced_at":"2025-05-15T13:02:55.831Z","repository":{"id":38351552,"uuid":"244035451","full_name":"mizrael/SuperSafeBank","owner":"mizrael","description":"Sample Event Sourcing implementation with .NET Core","archived":false,"fork":false,"pushed_at":"2025-01-24T23:33:02.000Z","size":491,"stargazers_count":587,"open_issues_count":2,"forks_count":104,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-04-07T16:11:11.109Z","etag":null,"topics":["azure","azure-functions","azure-service-bus","cosmosdb","dotnet","dotnet-core","event-sourcing","eventstore","kafka","mongodb","servicebus","unit-testing"],"latest_commit_sha":null,"homepage":"https://www.davidguida.net/event-sourcing-in-net-core-part-1-a-gentle-introduction/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mizrael.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["mizrael"]}},"created_at":"2020-02-29T20:19:13.000Z","updated_at":"2025-03-04T19:18:08.000Z","dependencies_parsed_at":"2025-02-22T08:10:28.704Z","dependency_job_id":"9a696b47-f4a8-4865-bc63-80583a55c762","html_url":"https://github.com/mizrael/SuperSafeBank","commit_stats":{"total_commits":224,"total_committers":7,"mean_commits":32.0,"dds":0.6205357142857143,"last_synced_commit":"7f24123b211d6028494e458194d887fdeea7cc81"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizrael%2FSuperSafeBank","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizrael%2FSuperSafeBank/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizrael%2FSuperSafeBank/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mizrael%2FSuperSafeBank/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mizrael","download_url":"https://codeload.github.com/mizrael/SuperSafeBank/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248961112,"owners_count":21189991,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure","azure-functions","azure-service-bus","cosmosdb","dotnet","dotnet-core","event-sourcing","eventstore","kafka","mongodb","servicebus","unit-testing"],"created_at":"2024-10-14T03:09:51.735Z","updated_at":"2025-04-14T20:55:04.751Z","avatar_url":"https://github.com/mizrael.png","language":"C#","funding_links":["https://github.com/sponsors/mizrael"],"categories":[],"sub_categories":[],"readme":"﻿# SuperSafeBank \n\n[![SuperSafeBank](https://circleci.com/gh/mizrael/SuperSafeBank.svg?style=shield)](https://app.circleci.com/pipelines/github/mizrael/SuperSafeBank)\n\nThis repository shows how to implement Event Sourcing, CQRS and DDD in .NET Core, using a Bank as example.\n\nThe code has been used as example accompaining a few series of articles on [my personal blog](https://www.davidguida.net): \n- https://www.davidguida.net/event-sourcing-in-net-core-part-1-a-gentle-introduction/\n- https://www.davidguida.net/event-sourcing-on-azure-part-1-architecture-plan/\n- https://www.davidguida.net/event-sourcing-on-azure-part-2-events-persistence/\n- https://www.davidguida.net/event-sourcing-on-azure-part-3-command-validation/\n- https://www.davidguida.net/event-sourcing-on-azure-part-4-integration-events/\n- https://www.davidguida.net/my-event-sourcing-journey-so-far/\n- https://www.davidguida.net/event-sourcing-things-to-consider/\n\nAn ASP.NET Core API is used as entry-point for all the client-facing operations:\n- create customers\n- create accounts\n- deposit money\n- withdraw money\n\n## Infrastructure\nThe Cloud can be hosted on Azure, using Azure Functions, [Storage Table](https://azure.microsoft.com/en-ca/services/storage/tables/?WT.mc_id=DOP-MVP-5003878) to persist Events and Materialized Views, and [ServiceBus](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview?WT.mc_id=DOP-MVP-5003878) to broadcast the Events.\n\nAn \"on-premise\" version is available as well, which uses\n- Kafka to broadcast the integration events\n- MongoDb to store the QueryModels used by the API\n or SQLServer can be used as persistence layer for aggregates.\n- several options are available for the Persistence layer to store aggregates:\n  - SQLServer\n  - [EventStore](https://eventstore.com/)\n  - [EvenireDB](https://github.com/mizrael/EvenireDB)\n\nThe on-premise infrastructure can be spin up by simply running `docker-compose up` from the root folder. \n\n## Give a Star! ⭐️\nDid you like this project? Give it a star, fork it, send me a PR or sponsor me!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizrael%2Fsupersafebank","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmizrael%2Fsupersafebank","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizrael%2Fsupersafebank/lists"}