$ show Ahoo-Wang/Wow
This repository is the **Wow** framework, a comprehensive, production-grade event-sourcing and CQRS framework for building reactive, cloud-native applications in Kotlin and Java. It provides a full stack: domain modeling with aggregates, commands, events, and sagas; reactive command/event buses with multiple backends (MongoDB, Redis, Elasticsearch, Kafka); a query gateway with rich filter DSL and snapshot/event-stream queries; automatic OpenAPI generation; a compensation subsystem with a React dashboard for managing failed executions and retries; observability via OpenTelemetry; and BI tooling for ClickHouse. The architecture is modular (30+ Gradle modules) but deployable as separate services (e.g., compensation server, example server). It is actively developed with extensive tests (unit, contract, integration, JMH benchmarks) and comprehensive documentation.
The LLM identified 3 files worth highlighting for reuse:
Implements a generic, configurable async batch coordinator that accumulates items and flushes them when a size or delay threshold is reached. Used as the backbone for efficient storage writes (e.g., MongoDB event appends). The component is isolated (no framework-specific imports beyond basic types) and can be extracted into any project needing batched writes with backpressure handling.
Provides a distributed wait/notify mechanism for synchronous command execution across components. It uses a key-based signal store to allow one component to wait for a result emitted by another. The pattern is self-contained (depends only on Reactor and basic abstractions) and could be reused in any reactive system requiring cross-process coordination, such as saga orchestration or request-response over event streams.
Implements a fluent, type-safe DSL for constructing complex filter expressions (and/or/not, comparisons, nested paths). The builder pattern is idiomatic Kotlin and produces immutable query objects. Despite being part of the query module, the DSL itself is independent of any storage backend and could be reused in any application needing a structured filter language with JSON serialization support.