Idiomatic Event Sourcing in Go

Overview

Eventually

Event Sourcing for Go


Idiomatic library to help you build Event Sourced application in Go.

Please note

The library is currently under development and not ready yet for production use-cases.

Note on semantic versioning

This library is actively being developed, and prior to v1 release the following Semantic versioning is being adopted:

  • Breaking changes are tagged with a new MINOR release
  • New features, patches and documentation are tagged with a new PATCH release

Contributing

You want to contribute to eventually but you don't know where to start?

First of all, thank you for considering contributing ❤️

You can head over our CONTRIBUTING section to know how to contribute to the project, and — in case you don't have a clear idea what to contribute — what is most needed needed from contributors.

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in eventually-go by you, shall be licensed as MIT, without any additional terms or conditions.

Issues
  • feat(eventstore): add ContextAware and ContextMetadata propagator

    feat(eventstore): add ContextAware and ContextMetadata propagator

    In order to provide a simple way to set common Metadata for a specific request/unit-of-work, this PR adds a eventstore.ContextMetadata to extend the request context.Context with the common Metadata, and an Event Store extension type, eventstore.ContextAware that appends this Metadata to each Domain Event appended using that context.Context.

    opened by ar3s3ru 1
  • fix: ensure to run golangci-linter for eventstore/postgres

    fix: ensure to run golangci-linter for eventstore/postgres

    With #59, I've noticed that some linting rules did not run and the code linting step passed successfully, although it shouldn't have.

    Turns out that, since eventstore/postgres is in a different Go module, golangci-lint must be run in that folder explicitly.

    This PR adds a new target to the Makefile, enumerating all the go.mod files and running golangci-lint in those folders.

    opened by ar3s3ru 1
  • Allow to wrap Event appending function for Postgres EventStore

    Allow to wrap Event appending function for Postgres EventStore

    This PR allows to wrap low level append function in Postgres EventStore implementation.

    This would allow to execute some actions before or after the base implementation, things like extra validations, deduplication, mapping, etc. Also, the base function could be completely replaced with some custom code (like running a different SQL function or a different serializer).

    What do you think about this idea @ar3s3ru? If it's ok, let me know if I need to update documentation or anything else.

    opened by Kostassoid 1
  • feat(subscription): re-enable Volatile subscriptions

    feat(subscription): re-enable Volatile subscriptions

    This PR re-introduces support for subscription.Volatile, by adding support for a new Event Store interface: eventstore.SequenceNumberGetter.

    With this interface, we can retrieve the latest sequence number value for the Event Store, and use a Catch-up Subscription that starts consuming from this value. Checkpoints should be disabled, as Volatile Subscriptions are meant not to carry state.

    opened by ar3s3ru 1
  • feat(projection): pilot checkpointing behavior inside Projection.Apply

    feat(projection): pilot checkpointing behavior inside Projection.Apply

    Sometimes it's desirable to specify inside a Projection whether the message being consumed should be checkpointed or not.

    Example: projecting messages to a Kafka topic using batching -- if a whole batch fails, but we already committed the batch events processed in the Projection, then we need manual intervention.

    This PR adds the following modifications:

    1. projection.Runner creates some checkpointing information (*bool) and post it in the context for Projection.Apply to use it,
    2. projection.Checkpoint(ctx), where the context set by projection.Runner specifies to checkpoint the current message if successful,
    3. projection.DoNotCheckpoint(ctx), as above but without checkpointing.
    enhancement 
    opened by ar3s3ru 1
  • refactor(eventstore): change Streamer interface to a single method, introduce Event Stream targets type

    refactor(eventstore): change Streamer interface to a single method, introduce Event Stream targets type

    Targets for the Event Store Stream operations were so far hardcoded (e.g. StreamAll, StreamByType, Stream).
    This makes implementations and mocks a bit more verbose (due to the number of methods), but mainly more verbose to add additional targets for stream operations.

    An example: streaming by multiple Event Stream types.

    Normally, that would've required an additional method, and implementing the method for every implementation of eventstore.Streamer around.

    However, we can simplify things and specify a sealed interface for representing Event Stream targets. So far, the supported targets are: All, By one Stream type, By multiple Stream types, By a single Stream ID.

    opened by ar3s3ru 1
  • feat(oteleventually): add events list to Append spans

    feat(oteleventually): add events list to Append spans

    The current logic to add events to Append telemetry data is broken.

    Fix it by marshaling the incoming events to JSON and add it to the Span attributes.

    opened by ar3s3ru 1
  • chore: add Github Actions to automate versioning release

    chore: add Github Actions to automate versioning release

    I hate manual tagging because, as everything tasked to a human being, the human factor brings inherent error.

    Since we're all ✨ software engineers here ✨ we can automate the tagging process when merging on main -- maybe after the tests have passed?

    NOTE: for each feature, a minor release should be used, and fix or minor branch, a patch release should be used instead.

    good first issue help wanted chore-repository 
    opened by ar3s3ru 1
Releases(v0.1.0-alpha.2)
  • v0.1.0-alpha.2(Oct 25, 2021)

    Please check the CHANGELOG for a detailed list of changes.


    Auto-generated list from GitHub:

    What's Changed

    • fix: ensure to run golangci-linter for eventstore/postgres by @ar3s3ru in https://github.com/get-eventually/go-eventually/pull/60
    • Allow to wrap Event appending function for Postgres EventStore by @Kostassoid in https://github.com/get-eventually/go-eventually/pull/59
    • Don't generate EventID if it's provided by @Kostassoid in https://github.com/get-eventually/go-eventually/pull/61
    • feat(postgres): add Serde interface by @ar3s3ru in https://github.com/get-eventually/go-eventually/pull/62
    • feat(command): use ShouldCaptureError func to capture command errors by @ar3s3ru in https://github.com/get-eventually/go-eventually/pull/63
    • release: v0.1.0-alpha.2 by @ar3s3ru in https://github.com/get-eventually/go-eventually/pull/64

    New Contributors

    • @Kostassoid made their first contribution in https://github.com/get-eventually/go-eventually/pull/59

    Full Changelog: https://github.com/get-eventually/go-eventually/compare/v0.1.0-alpha.1...v0.1.0-alpha.2

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0-alpha.1(Oct 10, 2021)

    Tagging this release as v0.1.0-alpha.1 since the library has been stable for a while. Still treating it as alpha, since some changes are already foreseen in the future (which might break the API).

    Source code(tar.gz)
    Source code(zip)
Owner
eventually
Event Sourcing for all
eventually
FreeSWITCH Event Socket library for the Go programming language.

eventsocket FreeSWITCH Event Socket library for the Go programming language. It supports both inbound and outbound event socket connections, acting ei

Alexandre Fiori 106 Jun 24, 2022
File system event notification library on steroids.

notify Filesystem event notification library on steroids. (under active development) Documentation godoc.org/github.com/rjeczalik/notify Installation

Rafal Jeczalik 743 Jun 12, 2022
An example event-driven application using Atmo and NATS

Atmo + NATS Example Project This repo is an example of using Atmo with NATS as a streaming messaging layer. In this example, Atmo connects to NATS and

Connor Hicks 2 Oct 27, 2021
The kprobe package allows construction of dynamic struct based on kprobe event format descriptions.

The kprobe package allows construction of dynamic struct based on kprobe event format descriptions.

Dan Kortschak 4 Oct 27, 2021
Eye - An easy-use lib for event-driven pattern

?? Eye Eye 是一个简单易用的事件驱动模式库。 Read me in English ?? 功能特性 敬请期待。。。 历史版本的特性请查看 HISTOR

水不要鱼 1 Jan 17, 2022
A pluggable backend API that enforces the Event Sourcing Pattern for persisting & broadcasting application state changes

A pluggable "Application State Gateway" that enforces the Event Sourcing Pattern for securely persisting & broadcasting application state ch

Coleman Word 28 May 4, 2022
A pluggable backend API that enforces the Event Sourcing Pattern for persisting & broadcasting application state changes

A pluggable "Application State Gateway" that enforces the Event Sourcing Pattern for securely persisting & broadcasting application state changes

null 28 May 4, 2022
CQRS & Event-Sourcing Framework for Go.

goes - Event-Sourcing Framework goes is a collection of interfaces, tools, and backend implementations that allow you to write event-sourced applicati

modernice.design 50 Jun 27, 2022
Build event-driven and event streaming applications with ease

Commander ?? Commander is Go library for writing event-driven applications. Enabling event sourcing, RPC over messages, SAGA's, bidirectional streamin

Jeroen Rinzema 60 Jun 13, 2022
KEDA is a Kubernetes-based Event Driven Autoscaling component. It provides event driven scale for any container running in Kubernetes

Kubernetes-based Event Driven Autoscaling KEDA allows for fine-grained autoscaling (including to/from zero) for event driven Kubernetes workloads. KED

KEDA 5.1k Jul 1, 2022
gevent imply go-event which tries to make event handling easier.

gevent imply go-event which tries to make event handling easier. What does gevent want to do Async execute jobs safely without too many go routines. S

null 7 Nov 10, 2021
Go-serverless-eth-event-listener - Go serverless, ethereum contract event listener with a sample contract

go-serverless-eth-event-listener This repository is for showing how to listen sm

Emre Ceylan 4 May 19, 2022
Govent is an event bus framework for DDD event source implement

Govent is an event bus framework for DDD event source implement. Govent can also solve the package circular dependency problem.

Michaelyn 2 Jan 28, 2022
Event-planning-go - GRAPHQL Project for Event Planning

About The Project GRAPHQL Project for Event Planning Building the project with l

Muhamad Hilmi Hibatullah 2 Mar 13, 2022
Go-Guardian is a golang library that provides a simple, clean, and idiomatic way to create powerful modern API and web authentication.

❗ Cache package has been moved to libcache repository Go-Guardian Go-Guardian is a golang library that provides a simple, clean, and idiomatic way to

Sanad Haj Yahya 381 Jul 1, 2022
Package goth provides a simple, clean, and idiomatic way to write authentication packages for Go web applications.

Goth: Multi-Provider Authentication for Go Package goth provides a simple, clean, and idiomatic way to write authentication packages for Go web applic

Mark Bates 3.7k Jun 27, 2022
Idiomatic Go input parsing with subcommands, positional values, and flags at any position. No required project or package layout and no external dependencies.

Sensible and fast command-line flag parsing with excellent support for subcommands and positional values. Flags can be at any position. Flaggy has no

Eric Greer 801 Jun 22, 2022
Command line tool to generate idiomatic Go code for SQL databases supporting PostgreSQL, MySQL, SQLite, Oracle, and Microsoft SQL Server

About xo xo is a command-line tool to generate Go code based on a database schema or a custom query. xo works by using database metadata and SQL intro

XO 3.1k Jul 1, 2022
csvutil provides fast and idiomatic mapping between CSV and Go (golang) values.

csvutil Package csvutil provides fast and idiomatic mapping between CSV and Go (golang) values. This package does not provide a CSV parser itself, it

Jacek Szwec 720 Jun 24, 2022
idiomatic codec and rpc lib for msgpack, cbor, json, etc. msgpack.org[Go]

go-codec This repository contains the go-codec library, the codecgen tool and benchmarks for comparing against other libraries. This is a High Perform

Ugorji Nwoke 1.7k Jun 22, 2022
Goview is a lightweight, minimalist and idiomatic template library based on golang html/template for building Go web application.

goview Goview is a lightweight, minimalist and idiomatic template library based on golang html/template for building Go web application. Contents Inst

foolin 284 Jun 21, 2022
An idiomatic Go (golang) validation package. Supports configurable and extensible validation rules (validators) using normal language constructs instead of error-prone struct tags.

ozzo-validation Description ozzo-validation is a Go package that provides configurable and extensible data validation capabilities. It has the followi

Ozzo Framework 2.8k Jul 1, 2022
Idiomatic HTTP Middleware for Golang

Negroni Notice: This is the library formerly known as github.com/codegangsta/negroni -- Github will automatically redirect requests to this repository

null 7.2k Jun 25, 2022
Idiomatic HTTP Middleware for Golang

Negroni Notice: This is the library formerly known as github.com/codegangsta/negroni -- Github will automatically redirect requests to this repository

null 7.2k Jun 24, 2022
lightweight, idiomatic and composable router for building Go HTTP services

chi is a lightweight, idiomatic and composable router for building Go HTTP services. It's especially good at helping you write large REST API services

go-chi 11.7k Jun 26, 2022
Minimal and idiomatic WebSocket library for Go

websocket websocket is a minimal and idiomatic WebSocket library for Go. Install go get nhooyr.io/websocket Highlights Minimal and idiomatic API First

Anmol Sethi 2.3k Jun 24, 2022
Fast and idiomatic client-driven REST APIs.

Vulcain is a brand new protocol using HTTP/2 Server Push to create fast and idiomatic client-driven REST APIs. An open source gateway server which you

Kévin Dunglas 3.3k Jun 29, 2022
Minimal and idiomatic WebSocket library for Go

websocket websocket is a minimal and idiomatic WebSocket library for Go. Install go get nhooyr.io/websocket Highlights Minimal and idiomatic API First

Anmol Sethi 2.3k Jun 24, 2022
lightweight, idiomatic and composable router for building Go HTTP services

chi is a lightweight, idiomatic and composable router for building Go HTTP services. It's especially good at helping you write large REST API services

go-chi 11.7k Jun 27, 2022