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.

Comments
  • refactor(serdes): exported serdes target []byte only

    refactor(serdes): exported serdes target []byte only

    The previous implementation of serdes in the serdes package were going from Src to Dst (and back), where Dst is a "supporting" intermediary data structure. This however is a separate concern that can be split from the implementations.

    This PR introduces the following changes:

    1. A new serdes.Chain(), to chain two serdes together,
    2. Change the serdes.* implementations to target a single type to byte-array instead.
    opened by ar3s3ru 1
  • fix: golangci-lint linter execution

    fix: golangci-lint linter execution

    After some time, golangci-lint is finally working ~well~ better with go.work files, which means we can finally enforce linter rules again (yay!)

    This PR re-enables the linter, and fixes the complaints it has.

    opened by ar3s3ru 1
  • 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 109 Oct 25, 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 773 Nov 30, 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 29 Nov 1, 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 29 Nov 1, 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 62 Nov 26, 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 61 Nov 2, 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.7k Dec 5, 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 418 Nov 20, 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.9k Nov 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 814 Nov 15, 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.3k Nov 24, 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 768 Dec 3, 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 Dec 4, 2022