/leesah-game

Hedelsedrevet applikasjonsutviklingspill!

Primary LanguageKotlin

🏞️ Life is a Stream of Events | the game

Beskrivelse

Leesah-game er et hendelsedrevet applikasjonsutviklingspill laget for å utfordre spilleren til å utvikle en applikasjon som kan håndtere et diverst utvalg av utfordrende hendelser som den mottar på eller utenfor NAIS-plattformen.

Eksempel leaderboardet som vises under spillet

Setup

Build

Prosjektet bruker Java 16. En praktisk måte å installere det på er med sdkman:

  • Installer sdkman
  • Installer Java 16 med sdkman: sdk install java 16.0.2-tem

Start opp Docker Desktop og sørg for at det kjører.

Bygg hele prosjektet i rotmappen med:

./gradlew clean build

Sett opp hele sulamitten i docker med:

docker compose up

Sende meldinger på Kafka

For å produsere (test)meldinger til kafka-topicet kan man laste ned kafka:

brew install kafka

og deretter åpne et "producer-shell" mot topicet med

kafka-console-producer --topic quiz-rapid --bootstrap-server localhost:29092

Meldinger som skrives inn i dette shellet blir sendt på topicet og forhåpentligvis mottatt av appen.

Frontend

Frontenden er plassert i en egen mappe under /quizboard. For lokal frontend-utvikling er det raskere å hoste frontend i utviklingsmodus med:

npm install npm run dev

Merk at dette er en helt frikoblet versjon av frontend, så all testdata må mockes.

Development

Modules

  • Quizmaster

    Handles the flow of the game. Reads and writes on the game topic

  • Quizboard (Leaderboard)

    Handles showing the state of the game as a webpage

TODO

  • Start new game
  • Accept team registration
  • Issue challenges
    • Challenge 1 ("<number> + <number>")

Data Model

TODO

Testdata

Team registration answer {"messageId": "b29175a7-059a-4a46-b274-94sd9f165473", "questionId": "b29175a7-059a-4a46-b274-947a9f165473", "type": "ANSWER", "category": "team-registration", "teamName": "", "answer": "coolteam"}

Arithmetic answer {"messageId": "b30175a7-059a-4a46-b274-947a9f165473", "questionId": "cc07eb49-3454-4bdf-91f2-475d6e9d855e", "type": "ANSWER", "teamName": "coolteam", "category": "arithmetic", "answer": "7"}