# alifcapital/eventstorage architecture

> Architecture diagram of the GitHub repository alifcapital/eventstorage, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alifcapital/eventstorage
- Repository: https://github.com/alifcapital/eventstorage

## Overview

EventStorage is a .NET library for durable inbox and outbox handling, backed by PostgreSQL. Applications store outgoing events through the outbox manager; the library persists them and later dispatches them to application-provided publishers, retrying failures. Incoming events can likewise be stored and processed through inbox handlers. Separate management services support querying and acting on stored events. The tree and excerpts establish persistence and management details; inbox/outbox processor internals and some runtime registrations were not sampled, so those links are marked unverified where needed.

Main entry points: [`src/Inbox/Repositories/InboxRepository.cs`](https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/Repositories/InboxRepository.cs) (Inbox repository), [`src/Outbox/Repositories/OutboxRepository.cs`](https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Repositories/OutboxRepository.cs) (Outbox repository), [`src/Repositories/BaseEventRepository.cs`](https://github.com/alifcapital/eventstorage/blob/main/src/Repositories/BaseEventRepository.cs) (Postgres repository), [`src/Outbox/Managers/OutboxEventManager.cs`](https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Managers/OutboxEventManager.cs) (Outbox manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_outbox["Outbox publishing"]
  node_outbox_manager["Outbox manager"]
  node_outbox_processor["Outbox processor"]
  node_publishers["Event publishers"]
  node_outbox_messages["Outbox messages<br/>[OutboxMessage.cs]"]
end

subgraph group_inbox["Inbox receiving"]
  node_inbox_manager["Inbox manager"]
  node_inbox_processor["Inbox processor"]
  node_handlers["Event handlers"]
  node_inbox_messages["Inbox messages<br/>[InboxMessage.cs]"]
end

subgraph group_storage["Persistence"]
  node_inbox_repo["Inbox repository<br/>[InboxRepository.cs]"]
  node_outbox_repo["Outbox repository"]
  node_base_repo["Postgres repository"]
end

subgraph group_operations["Management and setup"]
  node_management["Event management"]
  node_inbox_management["Inbox management"]
  node_outbox_management["Outbox management"]
  node_table_creator["Table creation"]
  node_settings["Inbox/outbox settings"]
end

node_app(("Application"))
node_inbox_source(("Event producers"))
node_postgres[("PostgreSQL")]

node_app -->|"stores event"| node_outbox_manager
node_outbox_manager -->|"creates message"| node_outbox_messages
node_outbox_manager -->|"inserts event"| node_outbox_repo
node_outbox_repo -->|"uses repository"| node_base_repo
node_base_repo -->|"reads and writes"| node_postgres
node_outbox_processor -.->|"fetches events"| node_outbox_repo
node_outbox_processor -.->|"dispatches to"| node_publishers
node_publishers -->|"performs delivery"| node_app
node_inbox_source -.->|"submits event"| node_inbox_manager
node_inbox_manager -->|"creates message"| node_inbox_messages
node_inbox_manager -->|"inserts event"| node_inbox_repo
node_inbox_repo -->|"uses repository"| node_base_repo
node_inbox_processor -.->|"fetches events"| node_inbox_repo
node_inbox_processor -.->|"dispatches to"| node_handlers
node_management -->|"queries and updates"| node_base_repo
node_inbox_management -.->|"specializes"| node_management
node_outbox_management -.->|"specializes"| node_management
node_table_creator -->|"creates tables"| node_inbox_repo
node_table_creator -->|"creates tables"| node_outbox_repo
node_settings -.->|"configures tables"| node_table_creator

click node_outbox_manager "https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Managers/OutboxEventManager.cs"
click node_outbox_processor "https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/OutboxEventsProcessor.cs"
click node_publishers "https://github.com/alifcapital/eventstorage/tree/main/src/Outbox/Providers/EventProviders"
click node_outbox_messages "https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Models/OutboxMessage.cs"
click node_inbox_manager "https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/Managers/InboxEventManager.cs"
click node_inbox_processor "https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/InboxEventsProcessor.cs"
click node_handlers "https://github.com/alifcapital/eventstorage/tree/main/src/Inbox/Providers"
click node_inbox_messages "https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/Models/InboxMessage.cs"
click node_inbox_repo "https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/Repositories/InboxRepository.cs"
click node_outbox_repo "https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Repositories/OutboxRepository.cs"
click node_base_repo "https://github.com/alifcapital/eventstorage/blob/main/src/Repositories/BaseEventRepository.cs"
click node_management "https://github.com/alifcapital/eventstorage/blob/main/src/Management/BaseEventsManagementService.cs"
click node_inbox_management "https://github.com/alifcapital/eventstorage/blob/main/src/Management/InboxEventsService.cs"
click node_outbox_management "https://github.com/alifcapital/eventstorage/blob/main/src/Management/OutboxEventsService.cs"
click node_table_creator "https://github.com/alifcapital/eventstorage/blob/main/src/Services/EventStoreTablesCreator.cs"
click node_settings "https://github.com/alifcapital/eventstorage/blob/main/src/Configurations/InboxOrOutboxStructure.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_outbox_manager,node_outbox_processor,node_publishers,node_outbox_messages toneBlue
class node_inbox_manager,node_inbox_processor,node_handlers,node_inbox_messages,node_postgres toneAmber
class node_inbox_repo,node_outbox_repo,node_base_repo toneMint
class node_management,node_inbox_management,node_outbox_management,node_table_creator,node_settings toneRose
class node_app,node_inbox_source toneIndigo
```

## Components

### Outbox publishing

- [Outbox manager](https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Managers/OutboxEventManager.cs): `src/Outbox/Managers/OutboxEventManager.cs`
- [Outbox processor](https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/OutboxEventsProcessor.cs): `src/Outbox/OutboxEventsProcessor.cs`
- [Event publishers](https://github.com/alifcapital/eventstorage/tree/main/src/Outbox/Providers/EventProviders): `src/Outbox/Providers/EventProviders`
- [Outbox messages](https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Models/OutboxMessage.cs): `src/Outbox/Models/OutboxMessage.cs`

### Inbox receiving

- [Inbox manager](https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/Managers/InboxEventManager.cs): `src/Inbox/Managers/InboxEventManager.cs`
- [Inbox processor](https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/InboxEventsProcessor.cs): `src/Inbox/InboxEventsProcessor.cs`
- [Event handlers](https://github.com/alifcapital/eventstorage/tree/main/src/Inbox/Providers): `src/Inbox/Providers`
- [Inbox messages](https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/Models/InboxMessage.cs): `src/Inbox/Models/InboxMessage.cs`

### Persistence

- [Inbox repository](https://github.com/alifcapital/eventstorage/blob/main/src/Inbox/Repositories/InboxRepository.cs): `src/Inbox/Repositories/InboxRepository.cs`
- [Outbox repository](https://github.com/alifcapital/eventstorage/blob/main/src/Outbox/Repositories/OutboxRepository.cs): `src/Outbox/Repositories/OutboxRepository.cs`
- [Postgres repository](https://github.com/alifcapital/eventstorage/blob/main/src/Repositories/BaseEventRepository.cs): `src/Repositories/BaseEventRepository.cs`

### Management and setup

- [Event management](https://github.com/alifcapital/eventstorage/blob/main/src/Management/BaseEventsManagementService.cs): `src/Management/BaseEventsManagementService.cs`
- [Inbox management](https://github.com/alifcapital/eventstorage/blob/main/src/Management/InboxEventsService.cs): `src/Management/InboxEventsService.cs`
- [Outbox management](https://github.com/alifcapital/eventstorage/blob/main/src/Management/OutboxEventsService.cs): `src/Management/OutboxEventsService.cs`
- [Table creation](https://github.com/alifcapital/eventstorage/blob/main/src/Services/EventStoreTablesCreator.cs): `src/Services/EventStoreTablesCreator.cs`
- [Inbox/outbox settings](https://github.com/alifcapital/eventstorage/blob/main/src/Configurations/InboxOrOutboxStructure.cs): `src/Configurations/InboxOrOutboxStructure.cs`

### Other components

- **Application**
- **Event producers**
- **PostgreSQL**

## Connections

- Application → Outbox manager: stores event (evidence: `README.md`)
- Outbox manager → Outbox messages: creates message (evidence: `src/Outbox/Managers/OutboxEventManager.cs`)
- Outbox manager → Outbox repository: inserts event (evidence: `src/Outbox/Managers/OutboxEventManager.cs`)
- Outbox repository → Postgres repository: uses repository (evidence: `src/Outbox/Repositories/OutboxRepository.cs`)
- Postgres repository → PostgreSQL: reads and writes (evidence: `src/Repositories/BaseEventRepository.cs`)
- Outbox processor → Outbox repository: fetches events
- Outbox processor → Event publishers: dispatches to
- Event publishers → Application: performs delivery (evidence: `README.md`)
- Event producers → Inbox manager: submits event
- Inbox manager → Inbox messages: creates message (evidence: `src/Inbox/Managers/InboxEventManager.cs`)
- Inbox manager → Inbox repository: inserts event (evidence: `src/Inbox/Managers/InboxEventManager.cs`)
- Inbox repository → Postgres repository: uses repository (evidence: `src/Inbox/Repositories/InboxRepository.cs`)
- Inbox processor → Inbox repository: fetches events
- Inbox processor → Event handlers: dispatches to
- Event management → Postgres repository: queries and updates (evidence: `src/Management/BaseEventsManagementService.cs`)
- Inbox management → Event management: specializes (evidence: `src/Management/InboxEventsService.cs`)
- Outbox management → Event management: specializes (evidence: `src/Management/OutboxEventsService.cs`)
- Table creation → Inbox repository: creates tables (evidence: `src/Services/EventStoreTablesCreator.cs`)
- Table creation → Outbox repository: creates tables (evidence: `src/Services/EventStoreTablesCreator.cs`)
- Inbox/outbox settings → Table creation: configures tables
