{"id":13808067,"url":"https://github.com/crabzilla/crabzilla","last_synced_at":"2025-04-05T22:09:53.029Z","repository":{"id":21144282,"uuid":"91769036","full_name":"crabzilla/crabzilla","owner":"crabzilla","description":"Yet another Event Sourcing experiment. A project exploring Vert.x to develop Event Sourcing / CQRS applications.","archived":false,"fork":false,"pushed_at":"2025-03-10T21:34:04.000Z","size":4108,"stargazers_count":73,"open_issues_count":1,"forks_count":9,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-03-29T21:08:44.063Z","etag":null,"topics":["cqrs","cqrs-es","event-sourcing","kotlin","postgresql","vertx"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crabzilla.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.TXT","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}},"created_at":"2017-05-19T05:32:04.000Z","updated_at":"2024-10-28T14:11:22.000Z","dependencies_parsed_at":"2023-12-06T20:29:48.377Z","dependency_job_id":"20afe9a1-96cf-4840-bc76-0dd92e8fa508","html_url":"https://github.com/crabzilla/crabzilla","commit_stats":null,"previous_names":[],"tags_count":68,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crabzilla%2Fcrabzilla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crabzilla%2Fcrabzilla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crabzilla%2Fcrabzilla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crabzilla%2Fcrabzilla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crabzilla","download_url":"https://codeload.github.com/crabzilla/crabzilla/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247406111,"owners_count":20933806,"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":["cqrs","cqrs-es","event-sourcing","kotlin","postgresql","vertx"],"created_at":"2024-08-04T01:01:34.496Z","updated_at":"2025-04-05T22:09:52.998Z","avatar_url":"https://github.com/crabzilla.png","language":"Kotlin","funding_links":[],"categories":["Examples"],"sub_categories":[],"readme":":sourcedir: src/main/java\n:source-highlighter: highlightjs\n:highlightjsdir: highlight\n:highlightjs-theme: rainbow\n:revnumber: {project-version}\n:example-caption!:\nifndef::imagesdir[:imagesdir: images]\nifndef::sourcedir[:sourcedir: ../../main/java]\n:toclevels: 4\n\n\nhttps://www.oracle.com/java/[image:https://img.shields.io/badge/Java-17-purple.svg[Vertx]]\nhttps://kotlinlang.org/[image:https://img.shields.io/badge/Kotlin-1.9.22-purple.svg[Vertx]]\nhttps://vertx.io[image:https://img.shields.io/badge/vert.x-4.5.1-purple.svg[Vertx]]\nhttps://github.com/crabzilla/crabzilla/actions/workflows/blank.yml[image:https://github.com/crabzilla/crabzilla/actions/workflows/blank.yml/badge.svg[CI]]\nhttps://codecov.io/gh/crabzilla/crabzilla[image:https://codecov.io/gh/crabzilla/crabzilla/branch/main/graph/badge.svg[codecov]]\nhttps://jitpack.io/#io.github.crabzilla/crabzilla[image:https://jitpack.io/v/io.github.crabzilla/crabzilla.svg[Jitpack]]\n\n== Objectives\n\n. Allows writing your testable `CQRS/ES` model with minimal dependencies.\n. Allows consistently handling your commands and save resulting events into `Postgres`.\n. Allows consistently and ordered projecting your events to your view models in `Postgres`.\n. Allows consistently and ordered publishing your events to Vertx eventbus, so you can integrate with any message broker, database, cache, etc.\n\n== Approach\n\n* Using https://vertx.io/docs/vertx-pg-client/java/[Vertx] `non-blocking IO` Postgres driver.\n* Using key `Postgres` features: json, notification and advisory locks.\n* Trying to be idiomatic Kotlin: type safeness: immutability, pattern matching, honouring your constructors.\n\n== crabzilla-core\n\nTo express your domain model.\n\n* State transitions occurs after computing results of pure functions `(State, Event) -\u003e State`.\n* Tests in BDD way without any dependency to Vertx: only to `crabzilla-core`:\n** given command, then assertion\n** given events, when command, then assertion\n** given commands or events in any order, then assertion\n\n== WIP\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrabzilla%2Fcrabzilla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrabzilla%2Fcrabzilla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrabzilla%2Fcrabzilla/lists"}