Compare commits

...

5 commits

Author SHA1 Message Date
4619f787f0
add pdf to gitignore
Some checks failed
Claude PR Review / claude-code (pull_request) Successful in 26s
Pull Request Labeler / labeler (pull_request_target) Successful in 22s
CI / Get Changed Files (pull_request) Successful in 34s
Label PRs based on size / Check PR size (pull_request) Successful in 35s
CI / Backend Tests (pull_request) Has been skipped
CI / Checkstyle Main (pull_request) Has been skipped
CI / oxlint (pull_request) Has been skipped
CI / Docker frontend validation (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / Docker backend validation (pull_request) Has been skipped
CI / test-build (pull_request) Has been skipped
CI / Playwright (pull_request) Has been skipped
CI / eslint (pull_request) Failing after 13m51s
2025-06-11 13:58:26 +02:00
3ca0b5a3c4
docs: Add API and JWT acronyms to documentation 2025-06-11 13:58:25 +02:00
7e30e191b4
Merge pull request 'docs: add dice docs' (!308) from docs-dice into main
All checks were successful
Build docs / build-docs (push) Successful in 12s
Reviewed-on: #308
Reviewed-by: Constantin Simonis <constantin@simonis.lol>
2025-06-11 11:57:03 +00:00
Phan Huy Tran
140bd44d66 chore: rebase
All checks were successful
Pull Request Labeler / labeler (pull_request_target) Successful in 4s
CI / Get Changed Files (pull_request) Successful in 13s
CI / Backend Tests (pull_request) Has been skipped
CI / eslint (pull_request) Has been skipped
CI / Checkstyle Main (pull_request) Has been skipped
CI / oxlint (pull_request) Has been skipped
CI / Docker frontend validation (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / test-build (pull_request) Has been skipped
Label PRs based on size / Check PR size (pull_request) Successful in 15s
CI / Docker backend validation (pull_request) Has been skipped
CI / Playwright (pull_request) Has been skipped
Claude PR Review / claude-code (pull_request) Successful in 27s
2025-06-11 13:55:31 +02:00
Phan Huy Tran
1d6ac261e0 docs: add dice docs 2025-06-11 13:54:50 +02:00
7 changed files with 58 additions and 1 deletions

View file

@ -6,7 +6,7 @@
*.fls *.fls
*.out *.out
*.toc *.toc
*.pdf
## Intermediate documents: ## Intermediate documents:
*.dvi *.dvi
*-converted-to.* *-converted-to.*

View file

@ -35,4 +35,6 @@
\acro{URL}{Uniform Resource Locator}\acused{URL} \acro{URL}{Uniform Resource Locator}\acused{URL}
\acro{VM}{Virtual Machine} \acro{VM}{Virtual Machine}
\acro{XML}{Extensible Markup Language} \acro{XML}{Extensible Markup Language}
\acro{API}{Application Programming Interface}
\acro{JWT}{JSON Web Token}
\end{acronym} \end{acronym}

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

View file

@ -2,3 +2,5 @@
\input{Inhalt/Einleitung} \input{Inhalt/Einleitung}
\input{Inhalt/Projektarchitektur} \input{Inhalt/Projektarchitektur}
\input{Inhalt/CI} \input{Inhalt/CI}
\input{Inhalt/Dice.tex}
\input{Inhalt/Auth.tex}

View file

@ -0,0 +1,9 @@
\section{Authentifizierung}
\label{sec:Authentifizierung}
Die Authentifizierung gegenüber der \acs{API} erfolgt über einen \acs{JWT}-Token, der dem Frontend nach Erfolgreicher Authentifizierung übergeben wird.
Authentifizierung läuft über zwei verschiedene Wege ab:
\begin{itemize}
\item \textbf{Registrierung mit username/password:} Der Nutzer füllt ein Registrierungs-Formular aus, welches die Anmeldedaten an die \acs{API} sendet. Diese validitert die Anmeldedaten und legt bei Erfolg einen neuen Nutzer an. Anschließend wird eine E-Mail-Verifizierungs-Mail gesendet. Bis der Link in der Verifizierungs-Mail nicht angeklickt wurde, ist der Nutzer nicht aktiv und kann sich nicht anmelden. Nach dem Klick auf den Link wird der Nutzer aktiviert und kann sich anmelden.
\item \textbf{Login mit username/password:} Der Nutzer füllt ein Anmelde-Formular, welches die Anmeldedaten an die \acs{API} sendet. Diese prüft die Anmeldedaten und gibt bei Erfolg einen \acs{JWT}-Token zurück. Falls kein Nutzer mit den Anmeldedaten existiert, wird der Nutzer aufgefordert einen Account zu erstellen.
\item \textbf{Login über Oauth (Open Authorization):} Der Nutzer meldet sich mit einem Oauth-Provider an, in unserem Fall Google oder Github. Das Backend leitet den Nutzer zum Oauth-Provider weiter, der die Anmeldedaten prüft und bei Erfolg den Nutzer auf die Applikation weiterleitet und einen Authorization-Code zurück gibt. Mit diesem Code holt sich die \acs{API} einen \acs{JWT} vom jeweiligen Provider und holt sich Nutzer-Informationen. Mit diesen wird dann ein existierender Nutzer eingeloggt, oder registriert falls der Nutzer noch kein Konto hatte. Anschließend wird von der \acs{API} ein \acs{JWT} generiert und an das Frontend weitergegeben.
\end{itemize}

View file

@ -0,0 +1,44 @@
\clearpage
\section{Dice}
\subsection{Was ist Dice?}
Das Würfelspiel 'Dice' ist ein originelles Spiel der Casinoplattform Stake.com\footnote{Stake.com ist eine bekannte Online-Glücksspielplattform, die eine Vielzahl von Casinospielen und Sportwetten anbietet.}. Das Spiel dreht sich um einen virtuellen 100-seitigen Würfel,
bei dem Spieler die Parameter ihrer Wette beeinflussen können. Im Kern geht es darum,
einen zuvor festgelegten 'Roll Over'- oder 'Roll Under'-Betrag zu unter- oder überschreiten,
um eine Runde zu gewinnen. Spieler haben die Kontrolle über den Multiplikator und ihre Gewinnchancen:
Durch die Anpassung des Zielwerts können sie das Verhältnis
von Risiko und potenzieller Auszahlung steuern. Ein höherer Multiplikator verspricht zwar größere Gewinne,
reduziert jedoch gleichzeitig die Wahrscheinlichkeit eines erfolgreichen Würfelwurfs.
\subsubsection{Zufallszahlengenerierung}
Zur Generierung des Würfelwurfs verwendet diese Implementierung die Standardklasse java.util.Random.
Sie erzeugt eine pseudo-zufällige Zahl zwischen 1 und 100 (inklusive),
die das Ergebnis des virtuellen 100-seitigen Würfels darstellt.
\subsubsection{Spielablauf und Datenfluss}
Der zentrale Controller steuert den Spielablauf und empfängt die Anfragen vom Frontend. Jede Anfrage enthält die Eckdaten des gewünschten Würfelwurfs:
\begin{itemize}
\item \textbf{Einsatz:} Der gesetzte Münzbetrag.
\item \textbf{Wettart:} Soll der Würfel ``über'' oder ``unter'' einen Wert fallen?
\item \textbf{Zielwert:} Der vom Spieler festgelegte Referenzwert (1-100).
\end{itemize}
Zuerst prüft der Controller das Guthaben des Spielers. Bei unzureichenden Mitteln wird der Vorgang abgelehnt. Andernfalls übergibt er die weitere Ausführung an die Dienstklasse.
Die Dienstklasse übernimmt die eigentliche Logik des Würfelspiels:
\begin{enumerate}
\item Zieht den Einsatz vom Spielerkonto ab.
\item Erzeugt einen zufälligen Würfelwurf (Wert zwischen 1 und 100).
\item Prüft, ob der Wurf die Gewinnbedingung erfüllt (entsprechend Wettart und Zielwert).
\item Berechnet die Gewinnwahrscheinlichkeit und den sich daraus ergebenden Multiplikator.
\item Schreibt bei einem Gewinn den entsprechenden Betrag (Einsatz $\times$ Multiplikator) dem Spielerkonto gut.
\end{enumerate}
Das Ergebnis des Spiels wird an das Frontend zurückgesendet und enthält:
\begin{itemize}
\item Gewinnstatus (gewonnen/verloren)
\item Auszahlungsbetrag
\item Gewürfelten Wert
\end{itemize}