Git Product home page Git Product logo

bmd007 / wonderland Goto Github PK

View Code? Open in Web Editor NEW
7.0 1.0 0.0 42.92 MB

Match making system based on event first philosophy, reactive systems and Stream processing

Java 9.56% HTML 0.10% Ruby 0.08% Swift 0.06% Objective-C 0.01% Dart 2.96% CMake 0.50% C++ 0.60% C 0.04% Dockerfile 0.06% Shell 0.04% JavaScript 85.60% TypeScript 0.41%
spring-boot cqrs architecture event-driven kafka rsocket java consul microservices flutter

wonderland's Introduction

Scenario:

After login, there will be plenty of activity (atm only dancing) to choose from. Choosing an activity means you are looking for a partner around yourself to carry the activity on together. Once two people have shown mutual interest toward each other, there are each other's match and can chat.

Also, each user has a profile containing a name plus a photo. The name is the user's gmail and photo can be selected in the profile edit page.

A Highly scalable geospatial matchmaking system

implemented using Stream processing and reactive system ideas

Stack:

  • Java
  • Spring family
  • Kafka and KafkaStreams
  • H2, Elasticsearch, Neo4j
  • Flutter
  • RSocket, AMQP, STOMP, HTTP
  • Firebase, GCP

Architecture

The architecture is event driven microservices and the applied pattern is CQRS. A new concept somewhat similar to event sourcing is being experimented with here:

Every user interaction that goes through api-gateway results in an event (if possible) instead of an HTTP call. 
So in terms of CRUD, only R (reads) are potential HTTP requests going out of API-gateway to core services.
Anything else is an event like: dancer1HasLikedDancer2, ... . 
This idea relies on the fact that Kafka topics can act as a durable, avaialbe, scalable, distrubted and ... database.

Toward outside:

  • There is AMQP based communication to RabbitMq and STOMP connection to the APP, as push solution for chatting
  • RSocket communication between API-gateway and the app.
  • HTTPs communication between API-gateway and the app.

ToDo:

* create chat-history kafka streams Map<ThisDancerName, Map<ChateeName, List<Message>> and back chatBoxWidget with it!
* publish logs into elastic search as application_log index
* rename wonder-matcher to dance-partner-finder or dance-partner-matcher .... names in the match making stack are not mature enough!
* refactor Consumed/Produced management in kafka stream applications. Use Kafka classes rather than yours. 
* upgrade elastic search stack to 7 and higher
* add authorization/authentication checks (resource server in OAuath2 world) (and connect it to google) in API gateway 
* integrate nomad (use information from master thesis)

wonderland's People

Contributors

bmd007 avatar dependabot[bot] avatar github-actions[bot] avatar neosmith007 avatar renovate-bot avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

wonderland's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

cocoapods
dance_partner_finder/ios/Podfile
dance_partner_finder/macos/Podfile
docker-compose
deployment/gcp/firebase/flutter_ui/docker-compose.yml
deployment/gcp/vm/docker-compose.yml
  • confluentinc/cp-kafka 7.6.0
dockerfile
dart-game-engine/Dockerfile
deployment/development-machine/rabbitmq/Dockerfile
deployment/gcp/firebase/flutter_ui/Dockerfile
  • httpd 2.4.54-alpine3.16
deployment/gcp/vm/rabbitmq/Dockerfile
github-actions
.github/workflows/build_flutter_pr_web.yml
  • actions/checkout v4
  • subosito/flutter-action v2
.github/workflows/deploy_github_pages.yml
  • actions/checkout v4
  • actions/configure-pages v4
  • actions/upload-pages-artifact v3
  • actions/deploy-pages v4
.github/workflows/flutter_build_deploy_to_firebase.yml
  • actions/checkout v4
.github/workflows/gradle_build.yml
  • actions/checkout v4
  • actions/setup-java v4
gradle
api-gateway/settings.gradle
api-gateway/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • com.google.guava:guava 33.1.0-jre
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
challenge-based-authentication/settings.gradle
challenge-based-authentication/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • com.google.guava:guava 33.1.0-jre
  • com.xebialabs.restito:restito 1.1.0
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
code-snippets/person-profile/gradle.properties
communication-graph/gradle.properties
communication-graph/settings.gradle
communication-graph/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • com.google.guava:guava 33.1.0-jre
  • com.playtika.testcontainers:embedded-kafka 3.1.5
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
dance_partner_finder/android/gradle.properties
dance_partner_finder/android/settings.gradle
dance_partner_finder/android/build.gradle
  • com.android.tools.build:gradle 8.3.1
  • com.google.gms:google-services 4.4.1
  • org.jetbrains.kotlin:kotlin-gradle-plugin 1.9.23
dance_partner_finder/android/app/build.gradle
  • com.google.firebase:firebase-appcheck-debug 17.1.2
message-publisher/gradle.properties
message-publisher/settings.gradle
message-publisher/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
message-search/gradle.properties
message-search/settings.gradle
message-search/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • com.google.guava:guava 33.1.0-jre
  • com.playtika.testcontainers:embedded-kafka 3.1.5
  • com.playtika.testcontainers:embedded-elasticsearch 3.1.5
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
webauthn-server/settings.gradle
webauthn-server/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • com.google.guava:guava 33.1.0-jre
  • com.yubico:webauthn-server-core 2.6.0-alpha5
  • com.yubico:webauthn-server-attestation 2.6.0-alpha5
  • com.yubico:yubico-util 2.6.0-alpha5
  • com.upokecenter:cbor 4.5.3
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
wise-soul/gradle.properties
wise-soul/settings.gradle
wise-soul/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • com.github.javafaker:javafaker 1.0.2
  • org.yaml:snakeyaml 2.2
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
wonder-matcher/gradle.properties
wonder-matcher/settings.gradle
wonder-matcher/build.gradle
  • org.springframework.boot 3.2.4
  • io.spring.dependency-management 1.1.4
  • org.hibernate.orm 6.4.4.Final
  • com.h2database:h2 2.2.224
  • org.locationtech.jts:jts-core 1.19.0
  • com.google.guava:guava 33.1.0-jre
  • org.awaitility:awaitility 4.2.1
  • org.springframework.cloud:spring-cloud-dependencies 2023.0.1
gradle-wrapper
api-gateway/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
challenge-based-authentication/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
communication-graph/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
dance_partner_finder/android/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
message-publisher/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
message-search/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
webauthn-server/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
wise-soul/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
wonder-matcher/gradle/wrapper/gradle-wrapper.properties
  • gradle 8.7
npm
code-snippets/webauthn/package.json
  • @github/webauthn-json ^2.1.1
  • react-device-detect ^2.1.2
  • url ^0.11.0
pub
dance_partner_finder/pubspec.yaml
  • flutter
  • audioplayers ^6.0.0
  • cupertino_icons ^1.0.5
  • mocktail ^1.0.0
  • bloc ^8.1.0
  • equatable ^2.0.5
  • bloc_test ^9.1.0
  • flutter_bloc ^8.1.1
  • rx_bloc ^5.0.0
  • rxdart ^0.27.7
  • location ^5.0.0
  • http ^1.0.0
  • dio ^5.1.0
  • web_socket_channel ^2.3.0
  • universal_io ^2.0.4
  • stomp_dart_client ^1.0.0
  • rsocket ^1.0.0
  • firebase_auth ^4.2.5
  • google_sign_in ^6.0.0
  • google_fonts ^6.0.0
  • font_awesome_flutter ^10.3.0
  • firebase_core ^2.4.1
  • firebase_storage ^11.0.10
  • firebase_app_check ^0.2.0
  • file_picker ^8.0.0
  • flutter_webrtc ^0.9.19
  • sdp_transform ^0.3.2
  • flutter_svg ^2.0.0
  • flame ^1.6.0
  • flame_forge2d ^0.17.0
  • flutter_lints ^3.0.0
  • dart ^3.1.0
dart-game-engine/pubspec.yaml
  • args ^2.0.0
  • shelf ^1.1.0
  • shelf_router ^1.0.0
  • equatable ^2.0.5
  • forge2d ^0.12.0
  • dart_amqp ^0.2.4
  • http ^1.0.0
  • lints ^3.0.0
  • test ^1.15.0
  • dart <4.0.0

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.