From 47ca56deb4b1c68ce49add72be2fb3eb24a80b56 Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Thu, 13 Feb 2025 13:19:12 +0100 Subject: [PATCH 001/258] fix: Remove material css --- frontend/angular.json | 2 - .../feature/landing/landing.component.html | 8 ++-- frontend/src/index.html | 7 +-- frontend/src/styles.css | 44 +++++++++---------- 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/frontend/angular.json b/frontend/angular.json index a6a1c7c..f7a1430 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -24,7 +24,6 @@ } ], "styles": [ - "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.css" ], "scripts": [] @@ -79,7 +78,6 @@ } ], "styles": [ - "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.css" ], "scripts": [] diff --git a/frontend/src/app/feature/landing/landing.component.html b/frontend/src/app/feature/landing/landing.component.html index fb7e0e2..63c67cd 100644 --- a/frontend/src/app/feature/landing/landing.component.html +++ b/frontend/src/app/feature/landing/landing.component.html @@ -1,10 +1,10 @@ -
+
-
-

+
+

Willkommensbonus

200% bis zu 500€
@@ -16,7 +16,7 @@
-

Beliebte Spiele

+

Beliebte Spiele

- - - + diff --git a/frontend/src/styles.css b/frontend/src/styles.css index d19c673..afc40fa 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -19,12 +19,12 @@ } body { - @apply !bg-deep-blue !text-text-primary h-full; + @apply bg-deep-blue text-text-primary h-full; } button, a { - @apply cursor-pointer active:scale-95 !text-text-primary transition-all duration-200; + @apply cursor-pointer active:scale-95 text-text-primary transition-all duration-200; } .card { @@ -32,7 +32,7 @@ a { } .button-base { - @apply bg-emerald hover:bg-emerald-dark !text-text-primary transition-all duration-300 active:scale-95 rounded; + @apply bg-emerald hover:bg-emerald-dark text-text-primary transition-all duration-300 active:scale-95 rounded; } .game-card-content { @@ -40,7 +40,7 @@ a { } .nav-button { - @apply hidden lg:block absolute top-1/2 -translate-y-1/2 bg-deep-blue-contrast hover:bg-deep-blue-contrast/90 !text-text-primary p-3 rounded-full opacity-0 group-hover:opacity-100 transition-all duration-300 shadow-lg hover:scale-110; + @apply hidden lg:block absolute top-1/2 -translate-y-1/2 bg-deep-blue-contrast hover:bg-deep-blue-contrast/90 text-text-primary p-3 rounded-full opacity-0 group-hover:opacity-100 transition-all duration-300 shadow-lg hover:scale-110; } .slider-container { @@ -52,47 +52,47 @@ a { } .welcome-bonus { - @apply !text-4xl sm:!text-5xl lg:!text-7xl !font-extrabold !text-emerald-light mb-3 sm:mb-4; + @apply text-4xl sm:text-5xl lg:text-7xl font-extrabold text-emerald-light mb-3 sm:mb-4; } .bonus-description { - @apply !text-text-secondary !text-base sm:!text-lg mb-6 sm:mb-8; + @apply text-text-secondary text-base sm:text-lg mb-6 sm:mb-8; } .section-heading { - @apply !font-bold !text-text-primary; + @apply font-bold text-text-primary; } .game-heading { - @apply !font-bold !text-text-primary !text-sm mb-2; + @apply font-bold text-text-primary text-sm mb-2; } .game-text { - @apply !text-text-secondary !text-sm mb-4; + @apply text-text-secondary text-sm mb-4; } .stat-container { - @apply bg-deep-blue-contrast rounded-lg shadow-lg p-4 sm:p-6 !text-center; + @apply bg-deep-blue-contrast rounded-lg shadow-lg p-4 sm:p-6 text-center; } .stat-number { - @apply !text-xl sm:!text-2xl !font-bold !text-emerald; + @apply text-xl sm:text-2xl font-bold text-emerald; } .stat-text { - @apply !text-text-secondary !text-sm; + @apply text-text-secondary text-sm; } .nav-brand { - @apply flex items-center !text-text-primary !text-xl !font-semibold; + @apply flex items-center text-text-primary text-xl font-semibold; } .nav-link { - @apply px-3 py-2 rounded-md !font-normal !text-sm !text-text-secondary hover:!text-text-primary hover:bg-deep-blue-contrast transition-all duration-200; + @apply px-3 py-2 rounded-md font-normal text-sm text-text-secondary hover:text-text-primary hover:bg-deep-blue-contrast transition-all duration-200; } .nav-toggle { - @apply !text-text-secondary hover:!text-text-primary transition-colors duration-200; + @apply text-text-secondary hover:text-text-primary transition-colors duration-200; } .nav-mobile-menu { @@ -100,7 +100,7 @@ a { } .nav-mobile-link { - @apply block px-3 py-2 rounded-md !text-sm !text-text-secondary hover:!text-text-primary hover:bg-deep-blue-light transition-all duration-200; + @apply block px-3 py-2 rounded-md text-sm text-text-secondary hover:text-text-primary hover:bg-deep-blue-light transition-all duration-200; } .footer-section { @@ -108,11 +108,11 @@ a { } .footer-heading { - @apply !text-text-primary !text-sm !font-semibold mb-4; + @apply text-text-primary text-sm font-semibold mb-4; } .footer-link { - @apply !text-text-secondary hover:!text-text-primary !text-sm transition-all duration-200; + @apply text-text-secondary hover:text-text-primary text-sm transition-all duration-200; } .footer-payment-method { @@ -120,19 +120,19 @@ a { } .footer-payment-icon { - @apply !text-text-secondary !text-lg; + @apply text-text-secondary text-lg; } .footer-payment-text { - @apply !text-text-secondary !text-xs !whitespace-nowrap; + @apply text-text-secondary text-xs whitespace-nowrap; } .footer-copyright { - @apply !text-text-secondary !text-sm; + @apply text-text-secondary text-sm; } .footer-disclaimer { - @apply !text-xs; + @apply text-xs; } .mat-mdc-dialog-container { From 0868ef0776dbf7c03ae29c3878c06699d2701e88 Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Wed, 19 Feb 2025 09:07:08 +0100 Subject: [PATCH 002/258] chore(docker): remove version from docker-compose file --- docker/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 0b7e617..2442d38 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3' - volumes: keycloak_data: postgres_data_keycloak_db: From 1c5f5524fa8a7458f63a91a99517a1607a142b90 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 09:20:43 +0100 Subject: [PATCH 003/258] ci: remove caching step from CI workflow --- .gitea/workflows/ci.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 366770a..83d4615 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -17,16 +17,6 @@ jobs: with: distribution: "temurin" java-version: "22" - - - uses: actions/cache@v3 - working-directory: ./backend - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - name: "Prepare Gradle" working-directory: ./backend run: gradle clean From 204b205b445fe1f13a72daf78701044305875880 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 09:26:38 +0100 Subject: [PATCH 004/258] ci: add caching for Gradle dependencies in CI workflow --- .gitea/workflows/ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 83d4615..eb515bb 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -17,6 +17,15 @@ jobs: with: distribution: "temurin" java-version: "22" + - name: "Cache Gradle dependencies" + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-common + restore-keys: | + gradle-${{ runner.os }}- - name: "Prepare Gradle" working-directory: ./backend run: gradle clean From 455ebdbe91f23f7bd084fd9f8f974cce7c6e4f4c Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 09:36:57 +0100 Subject: [PATCH 005/258] ci: add caching for Gradle build outputs --- .gitea/workflows/ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index eb515bb..eb1669a 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -26,6 +26,13 @@ jobs: key: gradle-${{ runner.os }}-common restore-keys: | gradle-${{ runner.os }}- + - name: "Cache Gradle build outputs" + uses: actions/cache@v3 + with: + path: backend/build + key: gradle-build-${{ runner.os }}-common + restore-keys: | + gradle-build-${{ runner.os }}- - name: "Prepare Gradle" working-directory: ./backend run: gradle clean From aa39a42df6086cced4d263489c1d33c5b6755127 Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Wed, 19 Feb 2025 09:40:14 +0100 Subject: [PATCH 006/258] docs(navbar): update navbar text to German language --- .../shared/components/navbar/navbar.component.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/shared/components/navbar/navbar.component.html b/frontend/src/app/shared/components/navbar/navbar.component.html index 6ce24cc..fa492ae 100644 --- a/frontend/src/app/shared/components/navbar/navbar.component.html +++ b/frontend/src/app/shared/components/navbar/navbar.component.html @@ -6,16 +6,16 @@ Trustworthy Casino
@@ -55,13 +55,13 @@
From 1bc2ca5f9ab60d874ad050dd0f8d2fff2cb8957a Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 09:47:55 +0100 Subject: [PATCH 007/258] ci: add tree command to CI workflow --- .gitea/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index eb1669a..d4a485c 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -39,6 +39,7 @@ jobs: - name: "Check" working-directory: ./backend run: gradle checkstyleMain + - run: tree - name: "Stop Gradle" working-directory: ./backend run: gradle --stop From 9d4fb96dafa58e86655e2f1e7e4c261f6eedc204 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 09:52:09 +0100 Subject: [PATCH 008/258] ci: update tree command in CI workflow --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index d4a485c..2ef77a4 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: - name: "Check" working-directory: ./backend run: gradle checkstyleMain - - run: tree + - run: find . -print | sed -e "s;[^/]*/;|____;g;s;____|; |;g" - name: "Stop Gradle" working-directory: ./backend run: gradle --stop From 13245cdab6c890637306e71519242543c1fedfad Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 09:54:41 +0100 Subject: [PATCH 009/258] ci: update CI workflow by removing unnecessary caching steps --- .gitea/workflows/ci.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 2ef77a4..eb515bb 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -26,20 +26,12 @@ jobs: key: gradle-${{ runner.os }}-common restore-keys: | gradle-${{ runner.os }}- - - name: "Cache Gradle build outputs" - uses: actions/cache@v3 - with: - path: backend/build - key: gradle-build-${{ runner.os }}-common - restore-keys: | - gradle-build-${{ runner.os }}- - name: "Prepare Gradle" working-directory: ./backend run: gradle clean - name: "Check" working-directory: ./backend run: gradle checkstyleMain - - run: find . -print | sed -e "s;[^/]*/;|____;g;s;____|; |;g" - name: "Stop Gradle" working-directory: ./backend run: gradle --stop From a8a7d4296a6bbcbdf3424594ba9aab84bdc54ce3 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:11:18 +0100 Subject: [PATCH 010/258] feat: add Dockerfile and CI workflow for image build --- .gitea/bunPipeline/Dockerfile | 18 ++++++++++++++++ .gitea/workflows/bun-image.yml | 38 ++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 .gitea/bunPipeline/Dockerfile create mode 100644 .gitea/workflows/bun-image.yml diff --git a/.gitea/bunPipeline/Dockerfile b/.gitea/bunPipeline/Dockerfile new file mode 100644 index 0000000..2a1e3f0 --- /dev/null +++ b/.gitea/bunPipeline/Dockerfile @@ -0,0 +1,18 @@ +from imbios/bun-node + + +jobs: + build: + name: Build and push image + runs-on: ubuntu-latest + container: catthehacker/ubuntu:act-latest + + steps: + - name: Build Docker image + uses: https://git.kjan.de/actions/docker-build@v1 + with: + name: node-npm + REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }} + REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file diff --git a/.gitea/workflows/bun-image.yml b/.gitea/workflows/bun-image.yml new file mode 100644 index 0000000..349eb60 --- /dev/null +++ b/.gitea/workflows/bun-image.yml @@ -0,0 +1,38 @@ +name: Build Docker Image + +on: + push: + branches: + - main + paths: + - package.json + - bun.lockb + pull_request: + branches: + - main + paths: + - package.json + - bun.lockb + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: .gitea/bunPipeline + file: .gitea/bunPipeline/Dockerfile + push: true + tags: git.simonis.lol/projects/bun-casino:latest # Change this to your repo + cache-from: type=registry,ref=git.simonis.lol/projects/bun-casino:latest + cache-to: type=inline From ecdcea49947cfedf3d4a261f5da12311b93f9144 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:12:16 +0100 Subject: [PATCH 011/258] ci: remove main branch restriction from workflow --- .gitea/workflows/bun-image.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitea/workflows/bun-image.yml b/.gitea/workflows/bun-image.yml index 349eb60..579cc07 100644 --- a/.gitea/workflows/bun-image.yml +++ b/.gitea/workflows/bun-image.yml @@ -8,8 +8,6 @@ on: - package.json - bun.lockb pull_request: - branches: - - main paths: - package.json - bun.lockb From 0d45d9659a7763cba5f2f190d76b67997c75c6d3 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:12:45 +0100 Subject: [PATCH 012/258] chore: rename bun-image.yml to bun.yml --- .gitea/workflows/{bun-image.yml => bun.yml} | 3 --- 1 file changed, 3 deletions(-) rename .gitea/workflows/{bun-image.yml => bun.yml} (94%) diff --git a/.gitea/workflows/bun-image.yml b/.gitea/workflows/bun.yml similarity index 94% rename from .gitea/workflows/bun-image.yml rename to .gitea/workflows/bun.yml index 579cc07..25805ac 100644 --- a/.gitea/workflows/bun-image.yml +++ b/.gitea/workflows/bun.yml @@ -8,9 +8,6 @@ on: - package.json - bun.lockb pull_request: - paths: - - package.json - - bun.lockb jobs: build: From a50b9be463ab42cca5ec28564a979906e98fa88f Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:16:43 +0100 Subject: [PATCH 013/258] ci: update runner to vps-4 in workflow configuration --- .gitea/workflows/bun.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index 25805ac..6bdfaae 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -11,7 +11,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: vps-4 steps: - name: Checkout repository uses: actions/checkout@v4 From 586044a23d86328d061fb29d6fd9d64601789cc9 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:18:38 +0100 Subject: [PATCH 014/258] chore: clean up Dockerfile by removing unused jobs section --- .gitea/bunPipeline/Dockerfile | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/.gitea/bunPipeline/Dockerfile b/.gitea/bunPipeline/Dockerfile index 2a1e3f0..acf3944 100644 --- a/.gitea/bunPipeline/Dockerfile +++ b/.gitea/bunPipeline/Dockerfile @@ -1,18 +1 @@ -from imbios/bun-node - - -jobs: - build: - name: Build and push image - runs-on: ubuntu-latest - container: catthehacker/ubuntu:act-latest - - steps: - - name: Build Docker image - uses: https://git.kjan.de/actions/docker-build@v1 - with: - name: node-npm - REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }} - REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file +from imbios/bun-node \ No newline at end of file From 0d67c0e3058ffdcfde7e9dbbe31033d729152d90 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:22:40 +0100 Subject: [PATCH 015/258] ci: add Docker.io login step to workflow configuration --- .gitea/workflows/bun.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index 6bdfaae..622bd74 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -22,6 +22,13 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Login to Docker.io Registry + uses: https://git.kjan.de/actions/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3 + with: + registry: git.simonis.lol + username: ${{ vars.DOCKER_USER }} + password: ${{ vars.DOCKER_PASS }} + - name: Build and push Docker image uses: docker/build-push-action@v5 with: From f8db9221a60de5d276e568f761c6211113b79405 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:24:36 +0100 Subject: [PATCH 016/258] ci: update login-action reference in workflow file --- .gitea/workflows/bun.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index 622bd74..6e44d14 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -23,7 +23,7 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Login to Docker.io Registry - uses: https://git.kjan.de/actions/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3 + uses: https://git.kjan.de/actions/login-action # v3 with: registry: git.simonis.lol username: ${{ vars.DOCKER_USER }} From ba776f0ec17f1fb52985f6d3e81e3aa292c2cc9f Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:25:16 +0100 Subject: [PATCH 017/258] ci: update Docker login action to version 3 --- .gitea/workflows/bun.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index 6e44d14..d4622f8 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -23,7 +23,7 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Login to Docker.io Registry - uses: https://git.kjan.de/actions/login-action # v3 + uses: https://git.kjan.de/actions/login-action@v3 # v3 with: registry: git.simonis.lol username: ${{ vars.DOCKER_USER }} From 9d8509731f837d0bb6ebcb050ca2e482328f8ded Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:27:06 +0100 Subject: [PATCH 018/258] ci: update Docker password variable in workflow file --- .gitea/workflows/bun.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index d4622f8..7e77a79 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -27,7 +27,7 @@ jobs: with: registry: git.simonis.lol username: ${{ vars.DOCKER_USER }} - password: ${{ vars.DOCKER_PASS }} + password: ${{ vars.DOCKER_PW }} - name: Build and push Docker image uses: docker/build-push-action@v5 From 3433641025e30e6123046bd5a542b2138a2b4827 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:30:05 +0100 Subject: [PATCH 019/258] ci: update paths in bun.yml for build triggers --- .gitea/workflows/bun.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index 7e77a79..066b7d9 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -5,9 +5,14 @@ on: branches: - main paths: - - package.json - - bun.lockb + - frontend/package.json + - frontend/bun.lock + - .gitea/bunPipeline/Dockerfile pull_request: + paths: + - frontend/package.json + - frontend/bun.lock + - .gitea/bunPipeline/Dockerfile jobs: build: From 4c376f8375dd2deb191227db272570bc347c9793 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:33:12 +0100 Subject: [PATCH 020/258] build: update Dockerfile and workflow context path --- .gitea/bunPipeline/Dockerfile | 4 +++- .gitea/workflows/bun.yml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitea/bunPipeline/Dockerfile b/.gitea/bunPipeline/Dockerfile index acf3944..038ace8 100644 --- a/.gitea/bunPipeline/Dockerfile +++ b/.gitea/bunPipeline/Dockerfile @@ -1 +1,3 @@ -from imbios/bun-node \ No newline at end of file +from imbios/bun-node + +COPY . . diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index 066b7d9..1b07240 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -37,7 +37,7 @@ jobs: - name: Build and push Docker image uses: docker/build-push-action@v5 with: - context: .gitea/bunPipeline + context: frontend file: .gitea/bunPipeline/Dockerfile push: true tags: git.simonis.lol/projects/bun-casino:latest # Change this to your repo From c0ad17490e55be30c872003bbb75f2cba27ccf27 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:34:55 +0100 Subject: [PATCH 021/258] build(Dockerfile): update Dockerfile for bun installation --- .gitea/bunPipeline/Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitea/bunPipeline/Dockerfile b/.gitea/bunPipeline/Dockerfile index 038ace8..3e49ce6 100644 --- a/.gitea/bunPipeline/Dockerfile +++ b/.gitea/bunPipeline/Dockerfile @@ -1,3 +1,6 @@ -from imbios/bun-node +FROM imbios/bun-node -COPY . . +COPY package.json . +COPY bun.lock . + +RUN bun install \ No newline at end of file From aa2bb187ce939cf7b01ea3067c980d35a98bf291 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:37:19 +0100 Subject: [PATCH 022/258] ci: update CI container image for test-build job --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 366770a..59491fe 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -79,7 +79,7 @@ jobs: name: test-build runs-on: vps-4 container: - image: catthehacker/ubuntu:act-latest + image: git.simonis.lol/projects/bun-casino:latest steps: - name: Checkout Code uses: actions/checkout@v4 From 313950e99811e66cc010c5f745cd67390076766c Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:42:43 +0100 Subject: [PATCH 023/258] ci: add command to list files in CI workflow --- .gitea/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 59491fe..f2b1654 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -83,6 +83,7 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v4 + - run: ls -la - name: Install bun uses: oven-sh/setup-bun@v2 - name: Install dependencies From 4ce4f86419f28af107d5aaaa2cbba128bb8a1b06 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:44:04 +0100 Subject: [PATCH 024/258] ci: update checkout step in CI workflow to change dir --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index f2b1654..68c7285 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -83,7 +83,7 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v4 - - run: ls -la + - run: cd frontend && ls -la - name: Install bun uses: oven-sh/setup-bun@v2 - name: Install dependencies From 50d0782e02c801bb333543f79aa3e3622bf9fd01 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 10:45:29 +0100 Subject: [PATCH 025/258] ci: update CI workflow for frontend directory listing --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 68c7285..974ebca 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -81,9 +81,9 @@ jobs: container: image: git.simonis.lol/projects/bun-casino:latest steps: + - run: cd frontend && ls -la - name: Checkout Code uses: actions/checkout@v4 - - run: cd frontend && ls -la - name: Install bun uses: oven-sh/setup-bun@v2 - name: Install dependencies From 36be142de1ca9e30c38adc6ca88baf3daf34654f Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:04:31 +0100 Subject: [PATCH 026/258] ci: simplify command in CI workflow configuration --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 974ebca..0d084f0 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -81,7 +81,7 @@ jobs: container: image: git.simonis.lol/projects/bun-casino:latest steps: - - run: cd frontend && ls -la + - run: ls -la - name: Checkout Code uses: actions/checkout@v4 - name: Install bun From 840d6b5bfd6c304a40f021b494586e5d26891627 Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Wed, 19 Feb 2025 11:06:57 +0100 Subject: [PATCH 027/258] refactor(routes): change home route to lazy loading --- frontend/src/app/app.routes.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index 73ed20c..dc68406 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -1,6 +1,5 @@ import { Routes } from '@angular/router'; import { LandingComponent } from './feature/landing/landing.component'; -import { HomeComponent } from './feature/home/home.component'; import { authGuard } from './auth.guard'; export const routes: Routes = [ @@ -10,7 +9,7 @@ export const routes: Routes = [ }, { path: 'home', - component: HomeComponent, + loadComponent: () => import('./feature/home/home.component'), canActivate: [authGuard], }, ]; From 562a93bbf16f550fb34351126e7e1d7eec6d250e Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Wed, 19 Feb 2025 11:07:46 +0100 Subject: [PATCH 028/258] refactor(home): change HomeComponent to default export --- frontend/src/app/feature/home/home.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index 7475214..d560eb8 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -11,7 +11,7 @@ import { NavbarComponent } from '../../shared/components/navbar/navbar.component templateUrl: './home.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class HomeComponent { +export default class HomeComponent { private keycloakService: KeycloakService = inject(KeycloakService); public dialog: MatDialog = inject(MatDialog); From 483446cdd9afb5ca3e6c9e57b2962df3e28ae66a Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:08:43 +0100 Subject: [PATCH 029/258] build: update Dockerfile to include CMD instruction --- .gitea/bunPipeline/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitea/bunPipeline/Dockerfile b/.gitea/bunPipeline/Dockerfile index 3e49ce6..efd56d7 100644 --- a/.gitea/bunPipeline/Dockerfile +++ b/.gitea/bunPipeline/Dockerfile @@ -3,4 +3,6 @@ FROM imbios/bun-node COPY package.json . COPY bun.lock . -RUN bun install \ No newline at end of file +RUN bun install + +CMD ["/bin/sh"] \ No newline at end of file From 82a3f4d195cf6f5e41f9cf14ddbb1a3d8933462c Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:09:08 +0100 Subject: [PATCH 030/258] ci: update CI workflow command to change directory first --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 0d084f0..4623d92 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -81,7 +81,7 @@ jobs: container: image: git.simonis.lol/projects/bun-casino:latest steps: - - run: ls -la + - run: cd / && ls -la - name: Checkout Code uses: actions/checkout@v4 - name: Install bun From aaff4a543b89c3b3ea5c12fc3b9f6ac75c359f34 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:18:14 +0100 Subject: [PATCH 031/258] ci: update path in CI workflow for proper execution --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 4623d92..2b90306 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -81,7 +81,7 @@ jobs: container: image: git.simonis.lol/projects/bun-casino:latest steps: - - run: cd / && ls -la + - run: cd /home/bun/app && ls -la - name: Checkout Code uses: actions/checkout@v4 - name: Install bun From c7acd8271a47b46b000fed825b2aae27a1cdbf7b Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:19:48 +0100 Subject: [PATCH 032/258] ci: update CI workflow to copy node_modules instead of bun --- .gitea/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 2b90306..d13b1f7 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -84,12 +84,10 @@ jobs: - run: cd /home/bun/app && ls -la - name: Checkout Code uses: actions/checkout@v4 - - name: Install bun - uses: oven-sh/setup-bun@v2 - name: Install dependencies run: | cd frontend - bun install + cp -r /home/bun/app/node_modules . - name: Test build run: | cd frontend From c0e7f5f7f85fa0562b3484511816f7a0cb897a26 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:21:29 +0100 Subject: [PATCH 033/258] ci: add bun install to CI workflow for frontend setup --- .gitea/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index d13b1f7..52c16e4 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -88,6 +88,7 @@ jobs: run: | cd frontend cp -r /home/bun/app/node_modules . + bun install - name: Test build run: | cd frontend From 876d174f8fed19dd72b80e2d0ac141b1fee174b4 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:24:45 +0100 Subject: [PATCH 034/258] ci: update CI workflow to remove bun installation step --- .gitea/workflows/ci.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 52c16e4..2fc38dd 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -45,12 +45,10 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v4 - - name: Install bun - uses: oven-sh/setup-bun@v2 - name: Install dependencies run: | cd frontend - bun install + cp -r /home/bun/app/node_modules . - name: Run Eslint run: | cd frontend @@ -64,12 +62,10 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v4 - - name: Install bun - uses: oven-sh/setup-bun@v2 - name: Install dependencies run: | cd frontend - bun install + cp -r /home/bun/app/node_modules . - name: Run prettier run: | cd frontend @@ -81,14 +77,12 @@ jobs: container: image: git.simonis.lol/projects/bun-casino:latest steps: - - run: cd /home/bun/app && ls -la - name: Checkout Code uses: actions/checkout@v4 - name: Install dependencies run: | cd frontend cp -r /home/bun/app/node_modules . - bun install - name: Test build run: | cd frontend From 0b61ce11e1bcb6a6a3798b0c19d2579602aaea95 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:27:01 +0100 Subject: [PATCH 035/258] build(ci): update container image for CI jobs --- .gitea/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 2fc38dd..9881355 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: name: eslint runs-on: vps-4 container: - image: catthehacker/ubuntu:act-latest + image: git.simonis.lol/projects/bun-casino:latest steps: - name: Checkout Code uses: actions/checkout@v4 @@ -58,7 +58,7 @@ jobs: name: prettier runs-on: vps-4 container: - image: catthehacker/ubuntu:act-latest + image: git.simonis.lol/projects/bun-casino:latest steps: - name: Checkout Code uses: actions/checkout@v4 From c258f1014d53fa83216b117b6274e814ca3ebe08 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:30:20 +0100 Subject: [PATCH 036/258] ci: update dependency installation to use symlink --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 9881355..80e9c89 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: - name: Install dependencies run: | cd frontend - cp -r /home/bun/app/node_modules . + ln -s /home/bun/app/node_modules node_modules - name: Test build run: | cd frontend From bb24af241cd5ff2536e5c27c7551055ce73e7954 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:35:44 +0100 Subject: [PATCH 037/258] ci: add timing to node_modules symlink creation step --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 80e9c89..0aec5ee 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: - name: Install dependencies run: | cd frontend - ln -s /home/bun/app/node_modules node_modules + time ln -s /home/bun/app/node_modules node_modules - name: Test build run: | cd frontend From 6fb3f2bef2b93a74c59b267881d39c12114d9bdd Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:36:51 +0100 Subject: [PATCH 038/258] ci: remove time command from CI workflow script --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 0aec5ee..80e9c89 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: - name: Install dependencies run: | cd frontend - time ln -s /home/bun/app/node_modules node_modules + ln -s /home/bun/app/node_modules node_modules - name: Test build run: | cd frontend From 7533f1139c21087d717bf113c73646b18c6b4ee8 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:38:18 +0100 Subject: [PATCH 039/258] ci: update workflow trigger for bun.yml file --- .gitea/workflows/bun.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml index 1b07240..0c6af27 100644 --- a/.gitea/workflows/bun.yml +++ b/.gitea/workflows/bun.yml @@ -2,13 +2,6 @@ name: Build Docker Image on: push: - branches: - - main - paths: - - frontend/package.json - - frontend/bun.lock - - .gitea/bunPipeline/Dockerfile - pull_request: paths: - frontend/package.json - frontend/bun.lock From c55fcd9ea06d22b0483bddafd85820dc1f8e2368 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:40:53 +0100 Subject: [PATCH 040/258] ci: update CI workflow to install dependencies correctly --- .gitea/workflows/ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 80e9c89..e418620 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -45,13 +45,10 @@ jobs: steps: - name: Checkout Code uses: actions/checkout@v4 - - name: Install dependencies - run: | - cd frontend - cp -r /home/bun/app/node_modules . - name: Run Eslint run: | cd frontend + cp -r /home/bun/app/node_modules . bun run lint prettier: From 793f3f68345c8233511beb7b7fa10a46ae40ecd3 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Thu, 13 Feb 2025 13:16:59 +0100 Subject: [PATCH 041/258] feat: add user creation on login (wip) --- .../de/szut/casino/user/UserController.java | 25 +++++++++++++ .../java/de/szut/casino/user/UserEntity.java | 18 +++++++++ .../de/szut/casino/user/UserRepository.java | 16 ++++++++ .../java/de/szut/casino/user/UserService.java | 37 +++++++++++++++++++ .../szut/casino/user/dto/CreateUserDto.java | 15 ++++++++ .../de/szut/casino/user/dto/GetUserDto.java | 15 ++++++++ frontend/src/app/app.config.ts | 2 +- frontend/src/app/app.routes.ts | 5 +++ frontend/src/app/auth.guard.ts | 12 ++---- .../login-success/login-success.component.css | 0 .../login-success.component.html | 1 + .../login-success/login-success.component.ts | 25 +++++++++++++ frontend/src/app/service/user.service.ts | 34 +++++++++++++++++ 13 files changed, 196 insertions(+), 9 deletions(-) create mode 100644 backend/src/main/java/de/szut/casino/user/UserController.java create mode 100644 backend/src/main/java/de/szut/casino/user/UserEntity.java create mode 100644 backend/src/main/java/de/szut/casino/user/UserRepository.java create mode 100644 backend/src/main/java/de/szut/casino/user/UserService.java create mode 100644 backend/src/main/java/de/szut/casino/user/dto/CreateUserDto.java create mode 100644 backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java create mode 100644 frontend/src/app/login-success/login-success.component.css create mode 100644 frontend/src/app/login-success/login-success.component.html create mode 100644 frontend/src/app/login-success/login-success.component.ts create mode 100644 frontend/src/app/service/user.service.ts diff --git a/backend/src/main/java/de/szut/casino/user/UserController.java b/backend/src/main/java/de/szut/casino/user/UserController.java new file mode 100644 index 0000000..7ee0739 --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/UserController.java @@ -0,0 +1,25 @@ +package de.szut.casino.user; + +import de.szut.casino.user.dto.CreateUserDto; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class UserController { + + @Autowired + private UserService userService; + + + @GetMapping("/user/{id}") + public ResponseEntity getUser(@PathVariable String id) { + return ResponseEntity.ok(userService.getUser(id)); + } + + @PostMapping("/user") + public ResponseEntity createUser(@RequestBody @Valid CreateUserDto userData) { + return ResponseEntity.ok(userService.createUser(userData)); + } +} diff --git a/backend/src/main/java/de/szut/casino/user/UserEntity.java b/backend/src/main/java/de/szut/casino/user/UserEntity.java new file mode 100644 index 0000000..3fb45a2 --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/UserEntity.java @@ -0,0 +1,18 @@ +package de.szut.casino.user; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +@Entity +public class UserEntity { + @Id + @GeneratedValue + private Long id; + private String keycloakId; + private String username; +} diff --git a/backend/src/main/java/de/szut/casino/user/UserRepository.java b/backend/src/main/java/de/szut/casino/user/UserRepository.java new file mode 100644 index 0000000..f009b44 --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/UserRepository.java @@ -0,0 +1,16 @@ +package de.szut.casino.user; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public interface UserRepository extends JpaRepository { + boolean existsByUsername(String username); + + @Query("SELECT u FROM UserEntity u WHERE u.keycloakId = ?1") + Optional findOneByKeycloakId(String keycloakId); + +} diff --git a/backend/src/main/java/de/szut/casino/user/UserService.java b/backend/src/main/java/de/szut/casino/user/UserService.java new file mode 100644 index 0000000..95cb01a --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/UserService.java @@ -0,0 +1,37 @@ +package de.szut.casino.user; + +import de.szut.casino.user.dto.CreateUserDto; +import de.szut.casino.user.dto.GetUserDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class UserService { + @Autowired + private UserRepository userRepository; + + public UserEntity createUser(CreateUserDto createUserDto) { + UserEntity user = new UserEntity(); + user.setUsername(createUserDto.getUsername()); + user.setKeycloakId(createUserDto.getKeycloakId()); + userRepository.save(user); + + return user; + } + + public GetUserDto getUser(String keycloakId) { + Optional user = this.userRepository.findOneByKeycloakId(keycloakId); + if (user.isPresent()) { + System.out.println(user.get()); + GetUserDto getUserDto = new GetUserDto(); + getUserDto.setKeycloakId(user.get().getKeycloakId()); + getUserDto.setUsername(user.get().getUsername()); + return getUserDto; + } + System.out.println("User not found: "+keycloakId); + + return null; + } +} diff --git a/backend/src/main/java/de/szut/casino/user/dto/CreateUserDto.java b/backend/src/main/java/de/szut/casino/user/dto/CreateUserDto.java new file mode 100644 index 0000000..ff28427 --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/dto/CreateUserDto.java @@ -0,0 +1,15 @@ +package de.szut.casino.user.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class CreateUserDto { + private String keycloakId; + private String username; +} diff --git a/backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java b/backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java new file mode 100644 index 0000000..95855f1 --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java @@ -0,0 +1,15 @@ +package de.szut.casino.user.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class GetUserDto { + private String keycloakId; + private String username; +} diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index 8401ece..cbe2fcf 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -27,7 +27,7 @@ export const initializeKeycloak = (keycloak: KeycloakService) => async () => onLoad: 'check-sso', silentCheckSsoRedirectUri: window.location.origin + '/silent-check-sso.html', checkLoginIframe: false, - redirectUri: 'http://localhost:4200', + redirectUri: window.location.origin + '/login/success', }, }); diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index 73ed20c..bbf1a56 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -2,12 +2,17 @@ import { Routes } from '@angular/router'; import { LandingComponent } from './feature/landing/landing.component'; import { HomeComponent } from './feature/home/home.component'; import { authGuard } from './auth.guard'; +import { LoginSuccessComponent } from './login-success/login-success.component'; export const routes: Routes = [ { path: '', component: LandingComponent, }, + { + path: 'login/success', + component: LoginSuccessComponent, + }, { path: 'home', component: HomeComponent, diff --git a/frontend/src/app/auth.guard.ts b/frontend/src/app/auth.guard.ts index 0743ff6..e97e4fc 100644 --- a/frontend/src/app/auth.guard.ts +++ b/frontend/src/app/auth.guard.ts @@ -1,4 +1,4 @@ -import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router'; import { inject } from '@angular/core'; import { KeycloakService } from 'keycloak-angular'; @@ -7,17 +7,13 @@ export const authGuard: CanActivateFn = async ( state: RouterStateSnapshot ) => { const keycloakService = inject(KeycloakService); - const isLoggedIn = keycloakService.isLoggedIn(); + const router = inject(Router); - if (isLoggedIn) { + if (keycloakService.isLoggedIn()) { return true; } - const baseurl = window.location.origin; - - keycloakService.login({ - redirectUri: `${baseurl}${state.url}`, - }); + router.navigate(['']); return false; }; diff --git a/frontend/src/app/login-success/login-success.component.css b/frontend/src/app/login-success/login-success.component.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/login-success/login-success.component.html b/frontend/src/app/login-success/login-success.component.html new file mode 100644 index 0000000..bf2b4b5 --- /dev/null +++ b/frontend/src/app/login-success/login-success.component.html @@ -0,0 +1 @@ +

login-success works!

diff --git a/frontend/src/app/login-success/login-success.component.ts b/frontend/src/app/login-success/login-success.component.ts new file mode 100644 index 0000000..5da8136 --- /dev/null +++ b/frontend/src/app/login-success/login-success.component.ts @@ -0,0 +1,25 @@ +import { Component, inject, OnInit } from '@angular/core'; +import { UserService } from '../service/user.service'; +import { KeycloakService } from 'keycloak-angular'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-login-success', + standalone: true, + imports: [], + templateUrl: './login-success.component.html', + styleUrl: './login-success.component.css' +}) +export class LoginSuccessComponent implements OnInit{ + private userService: UserService = inject(UserService); + private keycloakService: KeycloakService = inject(KeycloakService); + private router: Router = inject(Router); + + async ngOnInit() { + const userProfile = await this.keycloakService.loadUserProfile(); + const user = this.userService.getCurrentUser(userProfile); + sessionStorage.setItem('user', JSON.stringify(user)); + + // this.router.navigate(['']); + } +} diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts new file mode 100644 index 0000000..a195238 --- /dev/null +++ b/frontend/src/app/service/user.service.ts @@ -0,0 +1,34 @@ +import { inject, Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { KeycloakProfile } from 'keycloak-js'; +import { async } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class UserService { + private http: HttpClient = inject(HttpClient); + + public getUser(id: string) { + return this.http.get<{ keycloakId: string, username: string } | null>(`/backend/user/${id}`); + } + + public createUser(id: string, username: string) { + return this.http.post<{ keycloakId: string, username: string }>('/backend/user', { + keycloakId: id, + username: username, + }); + } + + public async getCurrentUser(userProfile: KeycloakProfile) { + if (userProfile.id == null) { + return; + } + return await this.getUser(userProfile.id).toPromise().then(async user => { + if (user) { + return user; + } + return await this.createUser(userProfile.id ?? '', userProfile.username ?? '').toPromise(); + }); + } +} From df9fa9f2753089add8dcf54b911952d09f89e705 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 11:34:49 +0100 Subject: [PATCH 042/258] fix: fix some stuff --- .../de/szut/casino/user/UserController.java | 32 ++++++++++- .../java/de/szut/casino/user/UserEntity.java | 3 + .../szut/casino/user/UserMappingService.java | 22 ++++++++ .../de/szut/casino/user/UserRepository.java | 3 +- .../java/de/szut/casino/user/UserService.java | 56 +++++++++++++++---- .../de/szut/casino/user/dto/GetUserDto.java | 1 + .../szut/casino/user/dto/KeycloakUserDto.java | 15 +++++ .../login-success/login-success.component.ts | 7 ++- frontend/src/app/model/User.ts | 4 ++ frontend/src/app/service/user.service.ts | 13 +++-- 10 files changed, 132 insertions(+), 24 deletions(-) create mode 100644 backend/src/main/java/de/szut/casino/user/UserMappingService.java create mode 100644 backend/src/main/java/de/szut/casino/user/dto/KeycloakUserDto.java create mode 100644 frontend/src/app/model/User.ts diff --git a/backend/src/main/java/de/szut/casino/user/UserController.java b/backend/src/main/java/de/szut/casino/user/UserController.java index 7ee0739..16bdf22 100644 --- a/backend/src/main/java/de/szut/casino/user/UserController.java +++ b/backend/src/main/java/de/szut/casino/user/UserController.java @@ -1,25 +1,55 @@ package de.szut.casino.user; import de.szut.casino.user.dto.CreateUserDto; +import de.szut.casino.user.dto.GetUserDto; import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +@Slf4j @RestController public class UserController { @Autowired private UserService userService; - @GetMapping("/user/{id}") public ResponseEntity getUser(@PathVariable String id) { + if (id == null || !userService.exists(id)) { + return ResponseEntity.notFound().build(); + } return ResponseEntity.ok(userService.getUser(id)); } @PostMapping("/user") public ResponseEntity createUser(@RequestBody @Valid CreateUserDto userData) { + if (userService.exists(userData.getKeycloakId())) { + + return this.redirect("/user/" + userData.getKeycloakId()); + } + return ResponseEntity.ok(userService.createUser(userData)); } + + @GetMapping("/user") + public ResponseEntity getCurrentUser(@RequestHeader("Authorization") String token) { + GetUserDto userData = userService.getCurrentUser(token); + + if (userData == null) { + return ResponseEntity.notFound().build(); + } + + return ResponseEntity.ok(userData); + } + + private ResponseEntity redirect(String route) { + HttpHeaders headers = new HttpHeaders(); + headers.add("Location", route); + + return new ResponseEntity<>(headers, HttpStatus.FOUND); + } } diff --git a/backend/src/main/java/de/szut/casino/user/UserEntity.java b/backend/src/main/java/de/szut/casino/user/UserEntity.java index 3fb45a2..cebd060 100644 --- a/backend/src/main/java/de/szut/casino/user/UserEntity.java +++ b/backend/src/main/java/de/szut/casino/user/UserEntity.java @@ -1,5 +1,6 @@ package de.szut.casino.user; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -13,6 +14,8 @@ public class UserEntity { @Id @GeneratedValue private Long id; + @Column(unique = true) private String keycloakId; private String username; + private float balance; } diff --git a/backend/src/main/java/de/szut/casino/user/UserMappingService.java b/backend/src/main/java/de/szut/casino/user/UserMappingService.java new file mode 100644 index 0000000..3789a1f --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/UserMappingService.java @@ -0,0 +1,22 @@ +package de.szut.casino.user; + +import de.szut.casino.user.dto.CreateUserDto; +import de.szut.casino.user.dto.GetUserDto; +import org.springframework.stereotype.Service; + +@Service +public class UserMappingService { + public GetUserDto mapToGetUserDto(UserEntity user) { + return new GetUserDto(user.getKeycloakId(), user.getUsername(), user.getBalance()); + } + + public UserEntity mapToUserEntity(CreateUserDto createUserDto) { + UserEntity user = new UserEntity(); + user.setKeycloakId(createUserDto.getKeycloakId()); + user.setUsername(createUserDto.getUsername()); + user.setBalance(0); + + return user; + } +} + diff --git a/backend/src/main/java/de/szut/casino/user/UserRepository.java b/backend/src/main/java/de/szut/casino/user/UserRepository.java index f009b44..aaa5752 100644 --- a/backend/src/main/java/de/szut/casino/user/UserRepository.java +++ b/backend/src/main/java/de/szut/casino/user/UserRepository.java @@ -8,9 +8,8 @@ import java.util.Optional; @Service public interface UserRepository extends JpaRepository { - boolean existsByUsername(String username); - @Query("SELECT u FROM UserEntity u WHERE u.keycloakId = ?1") Optional findOneByKeycloakId(String keycloakId); + boolean existsByKeycloakId(String keycloakId); } diff --git a/backend/src/main/java/de/szut/casino/user/UserService.java b/backend/src/main/java/de/szut/casino/user/UserService.java index 95cb01a..c3551ad 100644 --- a/backend/src/main/java/de/szut/casino/user/UserService.java +++ b/backend/src/main/java/de/szut/casino/user/UserService.java @@ -2,9 +2,21 @@ package de.szut.casino.user; import de.szut.casino.user.dto.CreateUserDto; import de.szut.casino.user.dto.GetUserDto; +import de.szut.casino.user.dto.KeycloakUserDto; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import java.net.URI; +import java.net.http.HttpClient; +import org.springframework.http.HttpHeaders; +import java.net.http.HttpRequest; +import java.time.Duration; +import java.util.List; +import java.util.Map; import java.util.Optional; @Service @@ -12,10 +24,14 @@ public class UserService { @Autowired private UserRepository userRepository; + @Autowired + private RestTemplate http; + + @Autowired + private UserMappingService mappingService; + public UserEntity createUser(CreateUserDto createUserDto) { - UserEntity user = new UserEntity(); - user.setUsername(createUserDto.getUsername()); - user.setKeycloakId(createUserDto.getKeycloakId()); + UserEntity user = mappingService.mapToUserEntity(createUserDto); userRepository.save(user); return user; @@ -23,15 +39,31 @@ public class UserService { public GetUserDto getUser(String keycloakId) { Optional user = this.userRepository.findOneByKeycloakId(keycloakId); - if (user.isPresent()) { - System.out.println(user.get()); - GetUserDto getUserDto = new GetUserDto(); - getUserDto.setKeycloakId(user.get().getKeycloakId()); - getUserDto.setUsername(user.get().getUsername()); - return getUserDto; - } - System.out.println("User not found: "+keycloakId); + return user.map(userEntity -> mappingService.mapToGetUserDto(userEntity)).orElse(null); - return null; + } + + public GetUserDto getCurrentUser(String token) { + KeycloakUserDto userData = getKeycloakUserInfo(token); + + if (userData == null) { + return null; + } + Optional user = this.userRepository.findOneByKeycloakId(userData.getSub()); + + return user.map(userEntity -> mappingService.mapToGetUserDto(userEntity)).orElse(null); + + } + + private KeycloakUserDto getKeycloakUserInfo(String token) { + HttpHeaders headers = new HttpHeaders(); + headers.set("Authorization", token); + ResponseEntity response = this.http.exchange("http://localhost:9090/realms/LF12/protocol/openid-connect/userinfo", HttpMethod.GET, new HttpEntity<>(headers), KeycloakUserDto.class); + + return response.getBody(); + } + + public boolean exists(String keycloakId) { + return userRepository.existsByKeycloakId(keycloakId); } } diff --git a/backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java b/backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java index 95855f1..fb690af 100644 --- a/backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java +++ b/backend/src/main/java/de/szut/casino/user/dto/GetUserDto.java @@ -12,4 +12,5 @@ import lombok.Setter; public class GetUserDto { private String keycloakId; private String username; + private float balance; } diff --git a/backend/src/main/java/de/szut/casino/user/dto/KeycloakUserDto.java b/backend/src/main/java/de/szut/casino/user/dto/KeycloakUserDto.java new file mode 100644 index 0000000..4238e13 --- /dev/null +++ b/backend/src/main/java/de/szut/casino/user/dto/KeycloakUserDto.java @@ -0,0 +1,15 @@ +package de.szut.casino.user.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class KeycloakUserDto { + private String sub; + private String preferred_username; +} diff --git a/frontend/src/app/login-success/login-success.component.ts b/frontend/src/app/login-success/login-success.component.ts index 5da8136..fea0072 100644 --- a/frontend/src/app/login-success/login-success.component.ts +++ b/frontend/src/app/login-success/login-success.component.ts @@ -1,4 +1,4 @@ -import { Component, inject, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; import { UserService } from '../service/user.service'; import { KeycloakService } from 'keycloak-angular'; import { Router } from '@angular/router'; @@ -8,7 +8,8 @@ import { Router } from '@angular/router'; standalone: true, imports: [], templateUrl: './login-success.component.html', - styleUrl: './login-success.component.css' + styleUrl: './login-success.component.css', + changeDetection: ChangeDetectionStrategy.OnPush, }) export class LoginSuccessComponent implements OnInit{ private userService: UserService = inject(UserService); @@ -17,7 +18,7 @@ export class LoginSuccessComponent implements OnInit{ async ngOnInit() { const userProfile = await this.keycloakService.loadUserProfile(); - const user = this.userService.getCurrentUser(userProfile); + const user = await this.userService.getOrCreateUser(userProfile); sessionStorage.setItem('user', JSON.stringify(user)); // this.router.navigate(['']); diff --git a/frontend/src/app/model/User.ts b/frontend/src/app/model/User.ts new file mode 100644 index 0000000..28081e4 --- /dev/null +++ b/frontend/src/app/model/User.ts @@ -0,0 +1,4 @@ +export interface User { + keycloakId: string; + username: string; +} diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts index a195238..00bafe1 100644 --- a/frontend/src/app/service/user.service.ts +++ b/frontend/src/app/service/user.service.ts @@ -1,7 +1,8 @@ import { inject, Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { KeycloakProfile } from 'keycloak-js'; -import { async } from 'rxjs'; +import { async, Observable } from 'rxjs'; +import { User } from '../model/User'; @Injectable({ providedIn: 'root', @@ -9,18 +10,18 @@ import { async } from 'rxjs'; export class UserService { private http: HttpClient = inject(HttpClient); - public getUser(id: string) { - return this.http.get<{ keycloakId: string, username: string } | null>(`/backend/user/${id}`); + public getUser(id: string): Observable { + return this.http.get(`/backend/user/${id}`); } - public createUser(id: string, username: string) { - return this.http.post<{ keycloakId: string, username: string }>('/backend/user', { + public createUser(id: string, username: string): Observable { + return this.http.post('/backend/user', { keycloakId: id, username: username, }); } - public async getCurrentUser(userProfile: KeycloakProfile) { + public async getOrCreateUser(userProfile: KeycloakProfile) { if (userProfile.id == null) { return; } From 2326d41a9641630303ee732fa56010e6a988f47d Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 11:39:03 +0100 Subject: [PATCH 043/258] satisfy quality tools --- frontend/src/app/auth.guard.ts | 7 ++----- .../login-success/login-success.component.ts | 4 ++-- frontend/src/app/service/user.service.ts | 20 ++++++++++--------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/frontend/src/app/auth.guard.ts b/frontend/src/app/auth.guard.ts index e97e4fc..035ccc8 100644 --- a/frontend/src/app/auth.guard.ts +++ b/frontend/src/app/auth.guard.ts @@ -1,11 +1,8 @@ -import { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router'; +import { CanActivateFn, Router } from '@angular/router'; import { inject } from '@angular/core'; import { KeycloakService } from 'keycloak-angular'; -export const authGuard: CanActivateFn = async ( - route: ActivatedRouteSnapshot, - state: RouterStateSnapshot -) => { +export const authGuard: CanActivateFn = async () => { const keycloakService = inject(KeycloakService); const router = inject(Router); diff --git a/frontend/src/app/login-success/login-success.component.ts b/frontend/src/app/login-success/login-success.component.ts index fea0072..f0608b4 100644 --- a/frontend/src/app/login-success/login-success.component.ts +++ b/frontend/src/app/login-success/login-success.component.ts @@ -11,7 +11,7 @@ import { Router } from '@angular/router'; styleUrl: './login-success.component.css', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class LoginSuccessComponent implements OnInit{ +export class LoginSuccessComponent implements OnInit { private userService: UserService = inject(UserService); private keycloakService: KeycloakService = inject(KeycloakService); private router: Router = inject(Router); @@ -21,6 +21,6 @@ export class LoginSuccessComponent implements OnInit{ const user = await this.userService.getOrCreateUser(userProfile); sessionStorage.setItem('user', JSON.stringify(user)); - // this.router.navigate(['']); + this.router.navigate(['']); } } diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts index 00bafe1..1f415a3 100644 --- a/frontend/src/app/service/user.service.ts +++ b/frontend/src/app/service/user.service.ts @@ -1,7 +1,7 @@ import { inject, Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { KeycloakProfile } from 'keycloak-js'; -import { async, Observable } from 'rxjs'; +import { Observable } from 'rxjs'; import { User } from '../model/User'; @Injectable({ @@ -10,8 +10,8 @@ import { User } from '../model/User'; export class UserService { private http: HttpClient = inject(HttpClient); - public getUser(id: string): Observable { - return this.http.get(`/backend/user/${id}`); + public getUser(id: string): Observable { + return this.http.get(`/backend/user/${id}`); } public createUser(id: string, username: string): Observable { @@ -25,11 +25,13 @@ export class UserService { if (userProfile.id == null) { return; } - return await this.getUser(userProfile.id).toPromise().then(async user => { - if (user) { - return user; - } - return await this.createUser(userProfile.id ?? '', userProfile.username ?? '').toPromise(); - }); + return await this.getUser(userProfile.id) + .toPromise() + .then(async (user) => { + if (user) { + return user; + } + return await this.createUser(userProfile.id ?? '', userProfile.username ?? '').toPromise(); + }); } } From 5afdbad461512ba5358de60e576c3e1cb606895c Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 11:41:17 +0100 Subject: [PATCH 044/258] refactor --- .../src/main/java/de/szut/casino/user/UserEntity.java | 9 +++++++++ .../java/de/szut/casino/user/UserMappingService.java | 7 +------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/user/UserEntity.java b/backend/src/main/java/de/szut/casino/user/UserEntity.java index cebd060..f6c1a5b 100644 --- a/backend/src/main/java/de/szut/casino/user/UserEntity.java +++ b/backend/src/main/java/de/szut/casino/user/UserEntity.java @@ -4,12 +4,15 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Setter @Getter @Entity +@NoArgsConstructor public class UserEntity { @Id @GeneratedValue @@ -18,4 +21,10 @@ public class UserEntity { private String keycloakId; private String username; private float balance; + + public UserEntity(String keycloakId, String username, float balance) { + this.keycloakId = keycloakId; + this.username = username; + this.balance = balance; + } } diff --git a/backend/src/main/java/de/szut/casino/user/UserMappingService.java b/backend/src/main/java/de/szut/casino/user/UserMappingService.java index 3789a1f..578ba49 100644 --- a/backend/src/main/java/de/szut/casino/user/UserMappingService.java +++ b/backend/src/main/java/de/szut/casino/user/UserMappingService.java @@ -11,12 +11,7 @@ public class UserMappingService { } public UserEntity mapToUserEntity(CreateUserDto createUserDto) { - UserEntity user = new UserEntity(); - user.setKeycloakId(createUserDto.getKeycloakId()); - user.setUsername(createUserDto.getUsername()); - user.setBalance(0); - - return user; + return new UserEntity(createUserDto.getUsername(), createUserDto.getKeycloakId(), 0); } } From bd26ded681cae4ce4b09c8be7a131b5f9a1e57ea Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:45:20 +0100 Subject: [PATCH 045/258] ci: update CI workflow for bun installation and caching --- .gitea/workflows/ci.yml | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index e418620..e1c1496 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -41,28 +41,35 @@ jobs: name: eslint runs-on: vps-4 container: - image: git.simonis.lol/projects/bun-casino:latest + image: catthehacker/ubuntu:act-latest steps: - name: Checkout Code uses: actions/checkout@v4 + - name: Install bun + uses: oven-sh/setup-bun@v2 + - name: Install dependencies + run: | + cd frontend + bun install - name: Run Eslint run: | cd frontend - cp -r /home/bun/app/node_modules . bun run lint prettier: name: prettier runs-on: vps-4 container: - image: git.simonis.lol/projects/bun-casino:latest + image: catthehacker/ubuntu:act-latest steps: - name: Checkout Code uses: actions/checkout@v4 + - name: Install bun + uses: oven-sh/setup-bun@v2 - name: Install dependencies run: | cd frontend - cp -r /home/bun/app/node_modules . + bun install - name: Run prettier run: | cd frontend @@ -72,14 +79,25 @@ jobs: name: test-build runs-on: vps-4 container: - image: git.simonis.lol/projects/bun-casino:latest + image: catthehacker/ubuntu:act-latest steps: - name: Checkout Code uses: actions/checkout@v4 + - name: Install bun + uses: oven-sh/setup-bun@v2 + - uses: actions/cache@v3 + working-directory: ./frontend + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-bun- + restore-keys: | + ${{ runner.os }}-bun- - name: Install dependencies run: | cd frontend - ln -s /home/bun/app/node_modules node_modules + bun install - name: Test build run: | cd frontend From a19ddeed47782f53366e4edbe78a800276060140 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:50:07 +0100 Subject: [PATCH 046/258] ci: update cache paths in CI configuration --- .gitea/workflows/ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index e1c1496..db9cb0e 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -89,8 +89,7 @@ jobs: working-directory: ./frontend with: path: | - ~/.gradle/caches - ~/.gradle/wrapper + node_modules key: ${{ runner.os }}-bun- restore-keys: | ${{ runner.os }}-bun- From 59263dca710cbd33959ccc99d7b63010ea98b702 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:54:35 +0100 Subject: [PATCH 047/258] ci: update path for node_modules in CI workflow --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index db9cb0e..c145f8f 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -89,7 +89,7 @@ jobs: working-directory: ./frontend with: path: | - node_modules + ~/node_modules key: ${{ runner.os }}-bun- restore-keys: | ${{ runner.os }}-bun- From fadedb0bcdcab7f2c8673670f967e604576509b0 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:57:08 +0100 Subject: [PATCH 048/258] ci: Fix node_modules path in CI workflow configuration --- .gitea/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c145f8f..7523a92 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -89,7 +89,7 @@ jobs: working-directory: ./frontend with: path: | - ~/node_modules + ~/node_modules/ key: ${{ runner.os }}-bun- restore-keys: | ${{ runner.os }}-bun- @@ -97,6 +97,7 @@ jobs: run: | cd frontend bun install + - run: cd frontend && ls -la - name: Test build run: | cd frontend From 2392dac5193b43431d6db8b3cf83b5f8e4b5dd92 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 11:58:56 +0100 Subject: [PATCH 049/258] ci: update path in CI workflow configuration --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 7523a92..a5cf425 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -89,7 +89,7 @@ jobs: working-directory: ./frontend with: path: | - ~/node_modules/ + node_modules/ key: ${{ runner.os }}-bun- restore-keys: | ${{ runner.os }}-bun- From a091387c1c9dda323c9928a95d5cfadba944d7a7 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 11:59:36 +0100 Subject: [PATCH 050/258] fix: 500 when loggin in --- .../src/main/java/de/szut/casino/user/UserMappingService.java | 2 +- frontend/src/app/service/user.service.ts | 4 ++-- frontend/src/app/shared/components/navbar/navbar.component.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/user/UserMappingService.java b/backend/src/main/java/de/szut/casino/user/UserMappingService.java index 578ba49..e0183ec 100644 --- a/backend/src/main/java/de/szut/casino/user/UserMappingService.java +++ b/backend/src/main/java/de/szut/casino/user/UserMappingService.java @@ -11,7 +11,7 @@ public class UserMappingService { } public UserEntity mapToUserEntity(CreateUserDto createUserDto) { - return new UserEntity(createUserDto.getUsername(), createUserDto.getKeycloakId(), 0); + return new UserEntity(createUserDto.getKeycloakId(), createUserDto.getUsername(), 0); } } diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts index 1f415a3..927ba1c 100644 --- a/frontend/src/app/service/user.service.ts +++ b/frontend/src/app/service/user.service.ts @@ -1,7 +1,7 @@ import { inject, Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { KeycloakProfile } from 'keycloak-js'; -import { Observable } from 'rxjs'; +import { catchError, EMPTY, Observable } from 'rxjs'; import { User } from '../model/User'; @Injectable({ @@ -11,7 +11,7 @@ export class UserService { private http: HttpClient = inject(HttpClient); public getUser(id: string): Observable { - return this.http.get(`/backend/user/${id}`); + return this.http.get(`/backend/user/${id}`).pipe(catchError(() => EMPTY)); } public createUser(id: string, username: string): Observable { diff --git a/frontend/src/app/shared/components/navbar/navbar.component.ts b/frontend/src/app/shared/components/navbar/navbar.component.ts index ba86e73..53d1dee 100644 --- a/frontend/src/app/shared/components/navbar/navbar.component.ts +++ b/frontend/src/app/shared/components/navbar/navbar.component.ts @@ -18,7 +18,7 @@ export class NavbarComponent { login() { try { const baseUrl = window.location.origin; - this.keycloakService.login({ redirectUri: `${baseUrl}/home` }); + this.keycloakService.login({ redirectUri: `${baseUrl}/login/success` }); } catch (error) { console.error('Login failed:', error); } From ef8111cc7e38e75edf0dea681fec872867caa207 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:01:14 +0100 Subject: [PATCH 051/258] ci: update node_modules path in CI workflow config --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index a5cf425..c90932e 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -89,7 +89,7 @@ jobs: working-directory: ./frontend with: path: | - node_modules/ + frontend/node_modules/ key: ${{ runner.os }}-bun- restore-keys: | ${{ runner.os }}-bun- From 0590a2f9ee59bc82908694c4309086ffbb94a84d Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:05:59 +0100 Subject: [PATCH 052/258] build(ci): add caching for frontend dependencies and dist --- .gitea/workflows/ci.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c90932e..93dd2e6 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -47,6 +47,14 @@ jobs: uses: actions/checkout@v4 - name: Install bun uses: oven-sh/setup-bun@v2 + - uses: actions/cache@v3 + working-directory: ./frontend + with: + path: | + frontend/node_modules/ + key: ${{ runner.os }}-bun- + restore-keys: | + ${{ runner.os }}-bun- - name: Install dependencies run: | cd frontend @@ -66,6 +74,14 @@ jobs: uses: actions/checkout@v4 - name: Install bun uses: oven-sh/setup-bun@v2 + - uses: actions/cache@v3 + working-directory: ./frontend + with: + path: | + frontend/node_modules/ + key: ${{ runner.os }}-bun- + restore-keys: | + ${{ runner.os }}-bun- - name: Install dependencies run: | cd frontend @@ -93,6 +109,14 @@ jobs: key: ${{ runner.os }}-bun- restore-keys: | ${{ runner.os }}-bun- + - uses: actions/cache@v3 + working-directory: ./frontend + with: + path: | + frontend/dist/ + key: ${{ runner.os }}-dist- + restore-keys: | + ${{ runner.os }}-dist- - name: Install dependencies run: | cd frontend From 877b6f77b2c55870dcef257967cabae5a9fbeb52 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 12:06:49 +0100 Subject: [PATCH 053/258] chore: move classes add balance fix routes --- frontend/src/app/app.config.ts | 2 +- frontend/src/app/app.routes.ts | 2 +- .../app/{ => feature}/login-success/login-success.component.css | 0 .../{ => feature}/login-success/login-success.component.html | 0 .../app/{ => feature}/login-success/login-success.component.ts | 2 +- frontend/src/app/model/User.ts | 1 + 6 files changed, 4 insertions(+), 3 deletions(-) rename frontend/src/app/{ => feature}/login-success/login-success.component.css (100%) rename frontend/src/app/{ => feature}/login-success/login-success.component.html (100%) rename frontend/src/app/{ => feature}/login-success/login-success.component.ts (93%) diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index cbe2fcf..217efd4 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -27,7 +27,7 @@ export const initializeKeycloak = (keycloak: KeycloakService) => async () => onLoad: 'check-sso', silentCheckSsoRedirectUri: window.location.origin + '/silent-check-sso.html', checkLoginIframe: false, - redirectUri: window.location.origin + '/login/success', + redirectUri: window.location.origin + '/', }, }); diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index bbf1a56..c4226c9 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -2,7 +2,7 @@ import { Routes } from '@angular/router'; import { LandingComponent } from './feature/landing/landing.component'; import { HomeComponent } from './feature/home/home.component'; import { authGuard } from './auth.guard'; -import { LoginSuccessComponent } from './login-success/login-success.component'; +import { LoginSuccessComponent } from './feature/login-success/login-success.component'; export const routes: Routes = [ { diff --git a/frontend/src/app/login-success/login-success.component.css b/frontend/src/app/feature/login-success/login-success.component.css similarity index 100% rename from frontend/src/app/login-success/login-success.component.css rename to frontend/src/app/feature/login-success/login-success.component.css diff --git a/frontend/src/app/login-success/login-success.component.html b/frontend/src/app/feature/login-success/login-success.component.html similarity index 100% rename from frontend/src/app/login-success/login-success.component.html rename to frontend/src/app/feature/login-success/login-success.component.html diff --git a/frontend/src/app/login-success/login-success.component.ts b/frontend/src/app/feature/login-success/login-success.component.ts similarity index 93% rename from frontend/src/app/login-success/login-success.component.ts rename to frontend/src/app/feature/login-success/login-success.component.ts index f0608b4..e0882f6 100644 --- a/frontend/src/app/login-success/login-success.component.ts +++ b/frontend/src/app/feature/login-success/login-success.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; -import { UserService } from '../service/user.service'; +import { UserService } from '../../service/user.service'; import { KeycloakService } from 'keycloak-angular'; import { Router } from '@angular/router'; diff --git a/frontend/src/app/model/User.ts b/frontend/src/app/model/User.ts index 28081e4..a579b7a 100644 --- a/frontend/src/app/model/User.ts +++ b/frontend/src/app/model/User.ts @@ -1,4 +1,5 @@ export interface User { keycloakId: string; username: string; + balance: number; } From 355d1b0c0674262fa88008d34536414228fbb73e Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:09:22 +0100 Subject: [PATCH 054/258] ci: update frontend build process in CI workflow --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 93dd2e6..2aad3da 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -121,8 +121,8 @@ jobs: run: | cd frontend bun install - - run: cd frontend && ls -la - name: Test build run: | cd frontend bun run build + ls -la From 8d4901601f2785cd4cdeda409fd8092c4cf26e7d Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 12:09:53 +0100 Subject: [PATCH 055/258] chore: adjust login success view --- .../src/app/feature/login-success/login-success.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/feature/login-success/login-success.component.html b/frontend/src/app/feature/login-success/login-success.component.html index bf2b4b5..ba9d449 100644 --- a/frontend/src/app/feature/login-success/login-success.component.html +++ b/frontend/src/app/feature/login-success/login-success.component.html @@ -1 +1 @@ -

login-success works!

+

Logging in...

From 642f5727e504eb8d0b3b6ecde102b1c86961ac2a Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:16:50 +0100 Subject: [PATCH 056/258] ci: update build output directory in CI workflow --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 2aad3da..1cf525b 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -125,4 +125,4 @@ jobs: run: | cd frontend bun run build - ls -la + ls -la dist From 6c025cc8d2ca94664448c7b03162b9c46a6b9b69 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 12:18:12 +0100 Subject: [PATCH 057/258] fix: lazy load login success component --- backend/src/main/java/de/szut/casino/user/UserService.java | 2 +- frontend/src/app/app.routes.ts | 3 +-- .../src/app/feature/login-success/login-success.component.ts | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/user/UserService.java b/backend/src/main/java/de/szut/casino/user/UserService.java index c3551ad..d114052 100644 --- a/backend/src/main/java/de/szut/casino/user/UserService.java +++ b/backend/src/main/java/de/szut/casino/user/UserService.java @@ -59,7 +59,7 @@ public class UserService { HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", token); ResponseEntity response = this.http.exchange("http://localhost:9090/realms/LF12/protocol/openid-connect/userinfo", HttpMethod.GET, new HttpEntity<>(headers), KeycloakUserDto.class); - + return response.getBody(); } diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index c4226c9..afab709 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -2,7 +2,6 @@ import { Routes } from '@angular/router'; import { LandingComponent } from './feature/landing/landing.component'; import { HomeComponent } from './feature/home/home.component'; import { authGuard } from './auth.guard'; -import { LoginSuccessComponent } from './feature/login-success/login-success.component'; export const routes: Routes = [ { @@ -11,7 +10,7 @@ export const routes: Routes = [ }, { path: 'login/success', - component: LoginSuccessComponent, + loadComponent: () => import('./feature/login-success/login-success.component'), }, { path: 'home', diff --git a/frontend/src/app/feature/login-success/login-success.component.ts b/frontend/src/app/feature/login-success/login-success.component.ts index e0882f6..bf81ac6 100644 --- a/frontend/src/app/feature/login-success/login-success.component.ts +++ b/frontend/src/app/feature/login-success/login-success.component.ts @@ -11,7 +11,7 @@ import { Router } from '@angular/router'; styleUrl: './login-success.component.css', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class LoginSuccessComponent implements OnInit { +export default class LoginSuccessComponent implements OnInit { private userService: UserService = inject(UserService); private keycloakService: KeycloakService = inject(KeycloakService); private router: Router = inject(Router); From 72f56928d4c1a8f4eb4f662a7705e692cadddeef Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:23:32 +0100 Subject: [PATCH 058/258] ci: add linelint job to CI workflow --- .gitea/workflows/ci.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 1cf525b..92963eb 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -4,6 +4,16 @@ on: pull_request: jobs: + linelint: + runs-on: ubuntu-latest + name: Check if all files end in newline + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Linelint + uses: actions/linelint@master + id: linelint + checkstyle: name: "Checkstyle Main" runs-on: "vps-4" @@ -124,5 +134,4 @@ jobs: - name: Test build run: | cd frontend - bun run build - ls -la dist + bun run build --no-clean From 7bd06dee62a62a600207cbf5d62b5edc259c3e5d Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Wed, 19 Feb 2025 12:23:45 +0100 Subject: [PATCH 059/258] refactor(user): reorganize imports and code structure --- .../de/szut/casino/user/UserController.java | 17 ++++++++++++----- .../java/de/szut/casino/user/UserService.java | 19 +++++++------------ frontend/src/app/app.routes.ts | 5 ++--- frontend/src/app/service/user.service.ts | 1 + 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/user/UserController.java b/backend/src/main/java/de/szut/casino/user/UserController.java index 16bdf22..4d232ac 100644 --- a/backend/src/main/java/de/szut/casino/user/UserController.java +++ b/backend/src/main/java/de/szut/casino/user/UserController.java @@ -1,14 +1,20 @@ package de.szut.casino.user; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; + import de.szut.casino.user.dto.CreateUserDto; import de.szut.casino.user.dto.GetUserDto; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; @Slf4j @RestController @@ -22,6 +28,7 @@ public class UserController { if (id == null || !userService.exists(id)) { return ResponseEntity.notFound().build(); } + return ResponseEntity.ok(userService.getUser(id)); } diff --git a/backend/src/main/java/de/szut/casino/user/UserService.java b/backend/src/main/java/de/szut/casino/user/UserService.java index d114052..724962e 100644 --- a/backend/src/main/java/de/szut/casino/user/UserService.java +++ b/backend/src/main/java/de/szut/casino/user/UserService.java @@ -1,23 +1,18 @@ package de.szut.casino.user; -import de.szut.casino.user.dto.CreateUserDto; -import de.szut.casino.user.dto.GetUserDto; -import de.szut.casino.user.dto.KeycloakUserDto; +import java.util.Optional; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; -import java.net.URI; -import java.net.http.HttpClient; -import org.springframework.http.HttpHeaders; -import java.net.http.HttpRequest; -import java.time.Duration; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import de.szut.casino.user.dto.CreateUserDto; +import de.szut.casino.user.dto.GetUserDto; +import de.szut.casino.user.dto.KeycloakUserDto; @Service public class UserService { @@ -39,8 +34,8 @@ public class UserService { public GetUserDto getUser(String keycloakId) { Optional user = this.userRepository.findOneByKeycloakId(keycloakId); - return user.map(userEntity -> mappingService.mapToGetUserDto(userEntity)).orElse(null); + return user.map(userEntity -> mappingService.mapToGetUserDto(userEntity)).orElse(null); } public GetUserDto getCurrentUser(String token) { diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index afab709..c7cfcf3 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -1,6 +1,5 @@ import { Routes } from '@angular/router'; import { LandingComponent } from './feature/landing/landing.component'; -import { HomeComponent } from './feature/home/home.component'; import { authGuard } from './auth.guard'; export const routes: Routes = [ @@ -11,10 +10,10 @@ export const routes: Routes = [ { path: 'login/success', loadComponent: () => import('./feature/login-success/login-success.component'), - }, + }, { path: 'home', - component: HomeComponent, + loadComponent: () => import('./feature/home/home.component'), canActivate: [authGuard], }, ]; diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts index 927ba1c..2f9c22f 100644 --- a/frontend/src/app/service/user.service.ts +++ b/frontend/src/app/service/user.service.ts @@ -31,6 +31,7 @@ export class UserService { if (user) { return user; } + return await this.createUser(userProfile.id ?? '', userProfile.username ?? '').toPromise(); }); } From 8da1ff8acd9f6119e2a25a56909123f904f198ca Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:24:55 +0100 Subject: [PATCH 060/258] ci: update CI runner to vps-4 from ubuntu-latest --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 92963eb..c7f8f20 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -5,7 +5,7 @@ on: jobs: linelint: - runs-on: ubuntu-latest + runs-on: vps-4 name: Check if all files end in newline steps: - name: Checkout From 5cb08ca5f8e5180b318d5e62663edfc8581e1834 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:27:29 +0100 Subject: [PATCH 061/258] ci: update build command in CI workflow --- .gitea/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c7f8f20..874b931 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -134,4 +134,4 @@ jobs: - name: Test build run: | cd frontend - bun run build --no-clean + bun run build From da50d19f9d2ddde99d8dd2c8ed938525e25a4305 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:30:07 +0100 Subject: [PATCH 062/258] ci: update CI workflow to use Super-linter for linting --- .gitea/workflows/ci.yml | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 874b931..43378a8 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -4,15 +4,26 @@ on: pull_request: jobs: - linelint: + build: + name: Lint runs-on: vps-4 - name: Check if all files end in newline + + permissions: + contents: read + packages: read + # To report GitHub Actions status checks + statuses: write + steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Linelint - uses: actions/linelint@master - id: linelint + - name: Checkout code + uses: actions/checkout@v4 + with: + # super-linter needs the full git history to get the + # list of files that changed across commits + fetch-depth: 0 + + - name: Super-linter + uses: super-linter/super-linter@v7.2.1 # x-release-please-version checkstyle: name: "Checkstyle Main" From da047eef70296e74384a40cd85c0c9358e6a74e0 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 12:31:07 +0100 Subject: [PATCH 063/258] style: prettier --- frontend/src/app/app.routes.ts | 2 +- frontend/src/app/service/user.service.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index c7cfcf3..6fbef95 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -10,7 +10,7 @@ export const routes: Routes = [ { path: 'login/success', loadComponent: () => import('./feature/login-success/login-success.component'), - }, + }, { path: 'home', loadComponent: () => import('./feature/home/home.component'), diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts index 2f9c22f..ba6bead 100644 --- a/frontend/src/app/service/user.service.ts +++ b/frontend/src/app/service/user.service.ts @@ -31,7 +31,7 @@ export class UserService { if (user) { return user; } - + return await this.createUser(userProfile.id ?? '', userProfile.username ?? '').toPromise(); }); } From 8547bd1fa32d1bf511a0a080556dff55dc4c2a2d Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:36:22 +0100 Subject: [PATCH 064/258] ci: remove lint job from CI configuration --- .gitea/workflows/ci.yml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 43378a8..9652bf0 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -4,27 +4,6 @@ on: pull_request: jobs: - build: - name: Lint - runs-on: vps-4 - - permissions: - contents: read - packages: read - # To report GitHub Actions status checks - statuses: write - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - # super-linter needs the full git history to get the - # list of files that changed across commits - fetch-depth: 0 - - - name: Super-linter - uses: super-linter/super-linter@v7.2.1 # x-release-please-version - checkstyle: name: "Checkstyle Main" runs-on: "vps-4" From 0c7c2ae9fa0e9d8faf5ff3118c7892a32fae089e Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:48:03 +0100 Subject: [PATCH 065/258] chore: remove obsolete Docker build workflow file --- .gitea/workflows/bun.yml | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 .gitea/workflows/bun.yml diff --git a/.gitea/workflows/bun.yml b/.gitea/workflows/bun.yml deleted file mode 100644 index 0c6af27..0000000 --- a/.gitea/workflows/bun.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Build Docker Image - -on: - push: - paths: - - frontend/package.json - - frontend/bun.lock - - .gitea/bunPipeline/Dockerfile - -jobs: - build: - runs-on: vps-4 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker.io Registry - uses: https://git.kjan.de/actions/login-action@v3 # v3 - with: - registry: git.simonis.lol - username: ${{ vars.DOCKER_USER }} - password: ${{ vars.DOCKER_PW }} - - - name: Build and push Docker image - uses: docker/build-push-action@v5 - with: - context: frontend - file: .gitea/bunPipeline/Dockerfile - push: true - tags: git.simonis.lol/projects/bun-casino:latest # Change this to your repo - cache-from: type=registry,ref=git.simonis.lol/projects/bun-casino:latest - cache-to: type=inline From 356a599dd5d2ede375ad8d94775dab3e4fc001e7 Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 19 Feb 2025 12:48:40 +0100 Subject: [PATCH 066/258] chore: remove unused Dockerfile from bunPipeline --- .gitea/bunPipeline/Dockerfile | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .gitea/bunPipeline/Dockerfile diff --git a/.gitea/bunPipeline/Dockerfile b/.gitea/bunPipeline/Dockerfile deleted file mode 100644 index efd56d7..0000000 --- a/.gitea/bunPipeline/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM imbios/bun-node - -COPY package.json . -COPY bun.lock . - -RUN bun install - -CMD ["/bin/sh"] \ No newline at end of file From 11c6634d6cc2e9dc3f46d77a28ba7a8a6b56c32d Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 19 Feb 2025 12:50:13 +0100 Subject: [PATCH 067/258] fix: build --- frontend/src/app/feature/home/home.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index 7475214..d560eb8 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -11,7 +11,7 @@ import { NavbarComponent } from '../../shared/components/navbar/navbar.component templateUrl: './home.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class HomeComponent { +export default class HomeComponent { private keycloakService: KeycloakService = inject(KeycloakService); public dialog: MatDialog = inject(MatDialog); From a933f0b397f332e7dde4b15a09c0128bc533b198 Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 19 Feb 2025 11:58:26 +0100 Subject: [PATCH 068/258] implemented better ui and pseudo data --- .../src/app/feature/home/home.component.html | 93 ++++++++++++++++--- .../src/app/feature/home/home.component.ts | 78 +++++++++++++++- .../feature/landing/landing.component.html | 12 +-- frontend/src/styles.css | 6 +- 4 files changed, 166 insertions(+), 23 deletions(-) diff --git a/frontend/src/app/feature/home/home.component.html b/frontend/src/app/feature/home/home.component.html index 27cec95..88222eb 100644 --- a/frontend/src/app/feature/home/home.component.html +++ b/frontend/src/app/feature/home/home.component.html @@ -1,19 +1,84 @@ +
+
+
+ +
-
-
-

Spiel Vorschau

-

Spiel Name

-
-
-

Spiel Vorschau

-

Spiel Name

- -
-
-

Spiel Vorschau

-

Spiel Name

- + +
+
+
+

Beliebte Spiele

+
+ + +
+
+ +
+
+
+
+ +
+
+

{{game.name}}

+ +
+
+
+
+
+
+ +
+

Alle Spiele

+
+
+
+ +
+
+

{{game.name}}

+ +
+
+
+
+
+
+
+ +
+
+

Konto

+
+ + + +
+
+ +
+

Letzte Transaktionen

+
+
+
+

{{transaction.type}}

+

{{transaction.date}}

+
+ + {{transaction.amount | currency:'EUR'}} + +
+
+
+
diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index d560eb8..b9221b8 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -2,12 +2,25 @@ import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; import { KeycloakService } from 'keycloak-angular'; import { MatDialog } from '@angular/material/dialog'; import { DepositComponent } from '../deposit/deposit.component'; - import { NavbarComponent } from '../../shared/components/navbar/navbar.component'; +import {CurrencyPipe, NgFor} from "@angular/common"; + +interface Game { + id: string; + name: string; + image: string; +} +interface Transaction { + id: string; + type: string; + amount: number; + date: string; +} + @Component({ selector: 'app-homepage', standalone: true, - imports: [NavbarComponent], + imports: [NavbarComponent, CurrencyPipe, NgFor], templateUrl: './home.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) @@ -15,6 +28,67 @@ export default class HomeComponent { private keycloakService: KeycloakService = inject(KeycloakService); public dialog: MatDialog = inject(MatDialog); + userAvatar = '/assets/images/default-avatar.png'; + username = this.keycloakService.getUsername(); + vipLevel = 1; + balance = 1000.00; + + featuredGames: Game[] = [ + { + id: '1', + name: 'Poker', + image: '/assets/images/games/poker.jpg', + }, + { + id: '2', + name: 'Blackjack', + image: '/assets/images/games/blackjack.jpg', + }, + { + id: '3', + name: 'Slots', + image: '/assets/images/games/slots.jpg', + }, + { + id: '4', + name: 'Plinko', + image: '/assets/images/games/plinko.jpg', + }, + { + id: '5', + name: 'Liars Dice', + image: '/assets/images/games/liars-dice.jpg', + }, + { + id: '6', + name: 'Lootboxen', + image: '/assets/images/games/lootboxen.jpg', + } + ]; + + allGames: Game[] = [...this.featuredGames]; + + recentTransactions: Transaction[] = [ + { + id: '1', + type: 'Deposit', + amount: 100.00, + date: '2024-03-20' + }, + { + id: '2', + type: 'Withdrawal', + amount: -50.00, + date: '2024-03-19' + }, + { + id: '3', + type: 'Bonus', + amount: 25.00, + date: '2024-03-18' + } + ]; + public logout() { const baseUrl = window.location.origin; diff --git a/frontend/src/app/feature/landing/landing.component.html b/frontend/src/app/feature/landing/landing.component.html index 63c67cd..597c71a 100644 --- a/frontend/src/app/feature/landing/landing.component.html +++ b/frontend/src/app/feature/landing/landing.component.html @@ -26,21 +26,21 @@
-

Slots

+

Slots

Klassische Spielautomaten

-

Plinko

+

Plinko

Spannendes Geschicklichkeitsspiel