From 3b1a97c08a1dc4e6f94ca0a480fd26c5770a1f75 Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Wed, 26 Feb 2025 10:03:34 +0100 Subject: [PATCH 001/187] fix: Redirect to homepage after login --- .../src/app/feature/login-success/login-success.component.ts | 2 +- frontend/src/app/shared/components/navbar/navbar.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 bf81ac6..067afe6 100644 --- a/frontend/src/app/feature/login-success/login-success.component.ts +++ b/frontend/src/app/feature/login-success/login-success.component.ts @@ -21,6 +21,6 @@ export default class LoginSuccessComponent implements OnInit { const user = await this.userService.getOrCreateUser(userProfile); sessionStorage.setItem('user', JSON.stringify(user)); - this.router.navigate(['']); + this.router.navigate(['home']); } } diff --git a/frontend/src/app/shared/components/navbar/navbar.component.html b/frontend/src/app/shared/components/navbar/navbar.component.html index fa492ae..b3e3df3 100644 --- a/frontend/src/app/shared/components/navbar/navbar.component.html +++ b/frontend/src/app/shared/components/navbar/navbar.component.html @@ -6,7 +6,7 @@ Trustworthy Casino From f09935564d8156beb9bc513a73462f414c62a062 Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 26 Feb 2025 10:17:07 +0100 Subject: [PATCH 002/187] refactor: refactor and clean up of home.component.ts --- .../src/app/feature/home/home.component.ts | 37 ++----------------- frontend/src/app/model/Game.ts | 5 +++ frontend/src/app/model/Transaction.ts | 6 +++ 3 files changed, 14 insertions(+), 34 deletions(-) create mode 100644 frontend/src/app/model/Game.ts create mode 100644 frontend/src/app/model/Transaction.ts diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index ebb2f02..050c885 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -1,21 +1,8 @@ -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 { ChangeDetectionStrategy, Component } from '@angular/core'; 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; -} +import {Game} from "../../model/Game"; +import {Transaction} from "../../model/Transaction"; @Component({ selector: 'app-homepage', @@ -25,14 +12,6 @@ interface Transaction { changeDetection: ChangeDetectionStrategy.OnPush, }) 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.0; - featuredGames: Game[] = [ { id: '1', @@ -88,14 +67,4 @@ export default class HomeComponent { date: '2024-03-18', }, ]; - - public logout() { - const baseUrl = window.location.origin; - - this.keycloakService.logout(`${baseUrl}/`); - } - - public openDialog() { - this.dialog.open(DepositComponent); - } } diff --git a/frontend/src/app/model/Game.ts b/frontend/src/app/model/Game.ts new file mode 100644 index 0000000..a3f3e74 --- /dev/null +++ b/frontend/src/app/model/Game.ts @@ -0,0 +1,5 @@ +export interface Game { + id: string; + name: string; + image: string; +} diff --git a/frontend/src/app/model/Transaction.ts b/frontend/src/app/model/Transaction.ts new file mode 100644 index 0000000..21277b4 --- /dev/null +++ b/frontend/src/app/model/Transaction.ts @@ -0,0 +1,6 @@ +export interface Transaction { + id: string; + type: string; + amount: number; + date: string; +} From cfd59d876d5a536d26792a06b785ccfeba0e03bf Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 26 Feb 2025 10:43:32 +0100 Subject: [PATCH 003/187] prettier --- frontend/src/app/feature/home/home.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index 050c885..c28b698 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; import { NavbarComponent } from '../../shared/components/navbar/navbar.component'; import { CurrencyPipe, NgFor } from '@angular/common'; -import {Game} from "../../model/Game"; -import {Transaction} from "../../model/Transaction"; +import { Game } from '../../model/Game'; +import { Transaction } from '../../model/Transaction'; @Component({ selector: 'app-homepage', From cf569386adf3e15b4d774318b5609fd54930dc2b Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 10:49:04 +0100 Subject: [PATCH 004/187] add test for user controller --- .../szut/casino/user/UserControllerTest.java | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 backend/src/test/java/de/szut/casino/user/UserControllerTest.java diff --git a/backend/src/test/java/de/szut/casino/user/UserControllerTest.java b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java new file mode 100644 index 0000000..9620a87 --- /dev/null +++ b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java @@ -0,0 +1,122 @@ +package de.szut.casino.user; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import de.szut.casino.user.dto.CreateUserDto; +import de.szut.casino.user.dto.GetUserDto; + +@WebMvcTest(UserController.class) +@AutoConfigureMockMvc(addFilters = false) // Disables Spring Security filters +public class UserControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Autowired + private ObjectMapper objectMapper; + + @MockBean + private UserService userService; + + private GetUserDto getUserDto; + private CreateUserDto createUserDto; + private UserEntity testUser; + private final String TEST_ID = "test-id-123"; + private final String AUTH_TOKEN = "Bearer test-token"; + + @BeforeEach + void setUp() { + getUserDto = new GetUserDto(); + getUserDto.setKeycloakId(TEST_ID); + getUserDto.setUsername("testuser"); + + testUser = new UserEntity(); + testUser.setKeycloakId(TEST_ID); + testUser.setUsername("testuser"); + + createUserDto = new CreateUserDto(); + createUserDto.setKeycloakId(TEST_ID); + createUserDto.setUsername("testuser"); + } + + @Test + void getUserByIdSuccess() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(true); + when(userService.getUser(TEST_ID)).thenReturn(getUserDto); + + mockMvc.perform(get("/user/" + TEST_ID)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.keycloakId").value(TEST_ID)) + .andExpect(jsonPath("$.username").value("testuser")); + } + + @Test + void getUserByIdNotFound() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(false); + + mockMvc.perform(get("/user/" + TEST_ID)) + .andExpect(status().isNotFound()); + } + + @Test + void createUserSuccess() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(false); + when(userService.createUser(any(CreateUserDto.class))).thenReturn(testUser); + + mockMvc.perform(post("/user") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(createUserDto))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.keycloakId").value(TEST_ID)) + .andExpect(jsonPath("$.username").value("testuser")); + } + + @Test + void createUserAlreadyExists() throws Exception { + when(userService.exists(TEST_ID)).thenReturn(true); + + mockMvc.perform(post("/user") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(createUserDto))) + .andExpect(status().isFound()) + .andExpect(header().string("Location", "/user/" + TEST_ID)); + } + + @Test + void getCurrentUserSuccess() throws Exception { + when(userService.getCurrentUser(AUTH_TOKEN)).thenReturn(getUserDto); + + mockMvc.perform(get("/user") + .header("Authorization", AUTH_TOKEN)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.keycloakId").value(TEST_ID)) + .andExpect(jsonPath("$.username").value("testuser")); + } + + @Test + void getCurrentUserNotFound() throws Exception { + when(userService.getCurrentUser(anyString())).thenReturn(null); + + mockMvc.perform(get("/user") + .header("Authorization", AUTH_TOKEN)) + .andExpect(status().isNotFound()); + } +} \ No newline at end of file From 834cb559efe68ba46a574182c7cad2cf1e320297 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 10:54:21 +0100 Subject: [PATCH 005/187] add test for health controller --- .../casino/health/HealthControllerTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 backend/src/test/java/de/szut/casino/health/HealthControllerTest.java diff --git a/backend/src/test/java/de/szut/casino/health/HealthControllerTest.java b/backend/src/test/java/de/szut/casino/health/HealthControllerTest.java new file mode 100644 index 0000000..1214c7a --- /dev/null +++ b/backend/src/test/java/de/szut/casino/health/HealthControllerTest.java @@ -0,0 +1,26 @@ +package de.szut.casino.health; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(HealthController.class) +@AutoConfigureMockMvc(addFilters = false) +public class HealthControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Test + void healthCheckReturnsUpStatus() throws Exception { + mockMvc.perform(get("/health")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("UP")); + } +} \ No newline at end of file From 39a9ca1831169a93c488ebbd50019cf9073af306 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 10:57:36 +0100 Subject: [PATCH 006/187] add test to ci --- .gitea/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 97dbeeb..5265980 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -35,6 +35,38 @@ jobs: - name: "Stop Gradle" working-directory: ./backend run: gradle --stop + + test: + name: "Test" + runs-on: "vps-4" + container: + image: "cimg/openjdk:22.0-node" + steps: + - name: "Checkout" + uses: actions/checkout@v3 + - name: Setup Java 22 + uses: actions/setup-java@v3 + 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 + - name: "Test" + working-directory: ./backend + run: gradle test + - name: "Stop Gradle" + working-directory: ./backend + run: gradle --stop eslint: name: eslint From 74f598a24cfe447f5e30782d106ec9af58c748a0 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 26 Feb 2025 11:01:23 +0100 Subject: [PATCH 007/187] remove comment --- .../src/test/java/de/szut/casino/user/UserControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/test/java/de/szut/casino/user/UserControllerTest.java b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java index 9620a87..2addb43 100644 --- a/backend/src/test/java/de/szut/casino/user/UserControllerTest.java +++ b/backend/src/test/java/de/szut/casino/user/UserControllerTest.java @@ -24,7 +24,7 @@ import de.szut.casino.user.dto.CreateUserDto; import de.szut.casino.user.dto.GetUserDto; @WebMvcTest(UserController.class) -@AutoConfigureMockMvc(addFilters = false) // Disables Spring Security filters +@AutoConfigureMockMvc(addFilters = false) public class UserControllerTest { @Autowired From aef0f09d09fc935d98c6ada158bf9344634c110f Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Wed, 26 Feb 2025 11:03:12 +0100 Subject: [PATCH 008/187] refactor: Change balance type to bigdecimal for better precision --- backend/requests/user.http | 9 +++++++++ .../src/main/java/de/szut/casino/user/UserEntity.java | 7 +++++-- .../java/de/szut/casino/user/UserMappingService.java | 5 +++-- .../main/java/de/szut/casino/user/dto/GetUserDto.java | 4 +++- frontend/src/app/service/user.service.ts | 5 +++-- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/backend/requests/user.http b/backend/requests/user.http index 3d466be..5e7aa5c 100644 --- a/backend/requests/user.http +++ b/backend/requests/user.http @@ -16,3 +16,12 @@ Authorization: Bearer {{token}} "username": "john.doe" } +### Deposit +POST http://localhost:8080/deposit/checkout +Content-Type: application/json +Origin: http://localhost:8080 +Authorization: Bearer {{token}} + +{ + "amount": 60.12 +} \ No newline at end of file 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 f6c1a5b..42b08ce 100644 --- a/backend/src/main/java/de/szut/casino/user/UserEntity.java +++ b/backend/src/main/java/de/szut/casino/user/UserEntity.java @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import java.math.BigDecimal; @Setter @Getter @@ -20,9 +21,11 @@ public class UserEntity { @Column(unique = true) private String keycloakId; private String username; - private float balance; - public UserEntity(String keycloakId, String username, float balance) { + @Column(precision = 19, scale = 2) + private BigDecimal balance; + + public UserEntity(String keycloakId, String username, BigDecimal 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 e0183ec..80f5546 100644 --- a/backend/src/main/java/de/szut/casino/user/UserMappingService.java +++ b/backend/src/main/java/de/szut/casino/user/UserMappingService.java @@ -4,6 +4,8 @@ import de.szut.casino.user.dto.CreateUserDto; import de.szut.casino.user.dto.GetUserDto; import org.springframework.stereotype.Service; +import java.math.BigDecimal; + @Service public class UserMappingService { public GetUserDto mapToGetUserDto(UserEntity user) { @@ -11,7 +13,6 @@ public class UserMappingService { } public UserEntity mapToUserEntity(CreateUserDto createUserDto) { - return new UserEntity(createUserDto.getKeycloakId(), createUserDto.getUsername(), 0); - } + return new UserEntity(createUserDto.getKeycloakId(), createUserDto.getUsername(), BigDecimal.ZERO); } } 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 fb690af..8521029 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 @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import java.math.BigDecimal; + @Getter @Setter @AllArgsConstructor @@ -12,5 +14,5 @@ import lombok.Setter; public class GetUserDto { private String keycloakId; private String username; - private float balance; + private BigDecimal balance; } diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts index ba6bead..caa9bf9 100644 --- a/frontend/src/app/service/user.service.ts +++ b/frontend/src/app/service/user.service.ts @@ -21,10 +21,11 @@ export class UserService { }); } - public async getOrCreateUser(userProfile: KeycloakProfile) { + public async getOrCreateUser(userProfile: KeycloakProfile): Promise { if (userProfile.id == null) { - return; + return null; } + return await this.getUser(userProfile.id) .toPromise() .then(async (user) => { From aa6ec4397ff7fd2b3d38589a8f571177ddaca8ef Mon Sep 17 00:00:00 2001 From: Phan Huy Tran Date: Wed, 26 Feb 2025 11:06:40 +0100 Subject: [PATCH 009/187] revert: revert --- frontend/src/app/service/user.service.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/service/user.service.ts b/frontend/src/app/service/user.service.ts index caa9bf9..ba6bead 100644 --- a/frontend/src/app/service/user.service.ts +++ b/frontend/src/app/service/user.service.ts @@ -21,11 +21,10 @@ export class UserService { }); } - public async getOrCreateUser(userProfile: KeycloakProfile): Promise { + public async getOrCreateUser(userProfile: KeycloakProfile) { if (userProfile.id == null) { - return null; + return; } - return await this.getUser(userProfile.id) .toPromise() .then(async (user) => { From 604d593fdcbbf67104354ca9ecf6870b91a4a628 Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 26 Feb 2025 12:41:35 +0100 Subject: [PATCH 010/187] feature: removed angular materials and implemented new deposit modal --- frontend/bun.lock | 3 -- frontend/package.json | 3 +- frontend/src/app/app.config.ts | 2 +- .../feature/deposit/deposit.component.html | 52 ++++++++++++------- .../app/feature/deposit/deposit.component.ts | 20 ++----- .../src/app/feature/home/home.component.html | 10 +++- .../src/app/feature/home/home.component.ts | 14 ++++- .../components/navbar/navbar.component.ts | 1 - frontend/src/index.html | 6 ++- frontend/src/styles.css | 3 ++ 10 files changed, 66 insertions(+), 48 deletions(-) diff --git a/frontend/bun.lock b/frontend/bun.lock index 91de068..f5631b4 100644 --- a/frontend/bun.lock +++ b/frontend/bun.lock @@ -10,7 +10,6 @@ "@angular/compiler": "^18.2.0", "@angular/core": "^18.2.0", "@angular/forms": "^18.2.0", - "@angular/material": "~18.2.14", "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", @@ -93,8 +92,6 @@ "@angular/forms": ["@angular/forms@18.2.13", "", { "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/common": "18.2.13", "@angular/core": "18.2.13", "@angular/platform-browser": "18.2.13", "rxjs": "^6.5.3 || ^7.4.0" } }, "sha512-A67D867fu3DSBhdLWWZl/F5pr7v2+dRM2u3U7ZJ0ewh4a+sv+0yqWdJW+a8xIoiHxS+btGEJL2qAKJiH+MCFfg=="], - "@angular/material": ["@angular/material@18.2.14", "", { "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/animations": "^18.0.0 || ^19.0.0", "@angular/cdk": "18.2.14", "@angular/common": "^18.0.0 || ^19.0.0", "@angular/core": "^18.0.0 || ^19.0.0", "@angular/forms": "^18.0.0 || ^19.0.0", "@angular/platform-browser": "^18.0.0 || ^19.0.0", "rxjs": "^6.5.3 || ^7.4.0" } }, "sha512-28pxzJP49Mymt664WnCtPkKeg7kXUsQKTKGf/Kl95rNTEdTJLbnlcc8wV0rT0yQNR7kXgpfBnG7h0ETLv/iu5Q=="], - "@angular/platform-browser": ["@angular/platform-browser@18.2.13", "", { "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/animations": "18.2.13", "@angular/common": "18.2.13", "@angular/core": "18.2.13" }, "optionalPeers": ["@angular/animations"] }, "sha512-tu7ZzY6qD3ATdWFzcTcsAKe7M6cJeWbT/4/bF9unyGO3XBPcNYDKoiz10+7ap2PUd0fmPwvuvTvSNJiFEBnB8Q=="], "@angular/platform-browser-dynamic": ["@angular/platform-browser-dynamic@18.2.13", "", { "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/common": "18.2.13", "@angular/compiler": "18.2.13", "@angular/core": "18.2.13", "@angular/platform-browser": "18.2.13" } }, "sha512-kbQCf9+8EpuJC7buBxhSiwBtXvjAwAKh6MznD6zd2pyCYqfY6gfRCZQRtK59IfgVtKmEONWI9grEyNIRoTmqJg=="], diff --git a/frontend/package.json b/frontend/package.json index c79aae0..646c8a4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,7 +19,6 @@ "@angular/compiler": "^18.2.0", "@angular/core": "^18.2.0", "@angular/forms": "^18.2.0", - "@angular/material": "~18.2.14", "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", @@ -53,4 +52,4 @@ "typescript": "~5.5.2", "typescript-eslint": "8.23.0" } -} +} \ No newline at end of file diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index 217efd4..d7b84bd 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -54,6 +54,6 @@ export const appConfig: ApplicationConfig = { useClass: KeycloakBearerInterceptor, multi: true, }, - provideAnimationsAsync(), + provideAnimationsAsync(), provideAnimationsAsync(), ], }; diff --git a/frontend/src/app/feature/deposit/deposit.component.html b/frontend/src/app/feature/deposit/deposit.component.html index 707d145..06e1b72 100644 --- a/frontend/src/app/feature/deposit/deposit.component.html +++ b/frontend/src/app/feature/deposit/deposit.component.html @@ -1,21 +1,33 @@ -

Guthaben aufladen

- -
-
- {{ errorMsg }} + +
+
+

Guthaben aufladen

+ +
+ {{ errorMsg }} +
+
+ + +
+ +
+ + +
-
- - -
- - - - - - +
+
+ diff --git a/frontend/src/app/feature/deposit/deposit.component.ts b/frontend/src/app/feature/deposit/deposit.component.ts index 36ec63f..e6545e5 100644 --- a/frontend/src/app/feature/deposit/deposit.component.ts +++ b/frontend/src/app/feature/deposit/deposit.component.ts @@ -1,17 +1,10 @@ -import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; +import {ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnInit, Output} from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { loadStripe, Stripe } from '@stripe/stripe-js'; import { DepositService } from '../../service/deposit.service'; import { debounceTime } from 'rxjs'; import { environment } from '../../../environments/environment'; import { NgIf } from '@angular/common'; -import { - MatDialogActions, - MatDialogContent, - MatDialogRef, - MatDialogTitle, -} from '@angular/material/dialog'; -import { MatButton } from '@angular/material/button'; @Component({ selector: 'app-deposit', @@ -19,20 +12,17 @@ import { MatButton } from '@angular/material/button'; imports: [ ReactiveFormsModule, NgIf, - MatDialogTitle, - MatDialogContent, - MatDialogActions, - MatButton, ], templateUrl: './deposit.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) export class DepositComponent implements OnInit { + @Input() isOpen: boolean = false; + @Output() close = new EventEmitter(); protected form!: FormGroup; protected errorMsg = ''; private stripe: Stripe | null = null; private service: DepositService = inject(DepositService); - public dialogRef: MatDialogRef = inject(MatDialogRef); async ngOnInit() { this.form = new FormGroup({ @@ -63,7 +53,7 @@ export class DepositComponent implements OnInit { }); } - public closeDialog(): void { - this.dialogRef.close(); + public closeModal() { + this.close.emit(); } } diff --git a/frontend/src/app/feature/home/home.component.html b/frontend/src/app/feature/home/home.component.html index 56a49cf..011f236 100644 --- a/frontend/src/app/feature/home/home.component.html +++ b/frontend/src/app/feature/home/home.component.html @@ -22,7 +22,7 @@
- +
@@ -41,7 +41,7 @@
- +
@@ -56,10 +56,14 @@
+

Konto

+ @@ -69,6 +73,8 @@
+ +

Letzte Transaktionen

diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index c28b698..a77109b 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -1,17 +1,20 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; +import {ChangeDetectionStrategy, Component, inject} from '@angular/core'; import { NavbarComponent } from '../../shared/components/navbar/navbar.component'; import { CurrencyPipe, NgFor } from '@angular/common'; import { Game } from '../../model/Game'; import { Transaction } from '../../model/Transaction'; +import {DepositComponent} from "../deposit/deposit.component"; @Component({ selector: 'app-homepage', standalone: true, - imports: [NavbarComponent, CurrencyPipe, NgFor], + imports: [NavbarComponent, CurrencyPipe, NgFor, DepositComponent], templateUrl: './home.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) export default class HomeComponent { + isDepositModalOpen = false; + featuredGames: Game[] = [ { id: '1', @@ -67,4 +70,11 @@ export default class HomeComponent { date: '2024-03-18', }, ]; + + openDepositModal(){ + this.isDepositModalOpen = true; + } + closeDepositModal(){ + this.isDepositModalOpen = false; + } } diff --git a/frontend/src/app/shared/components/navbar/navbar.component.ts b/frontend/src/app/shared/components/navbar/navbar.component.ts index 53d1dee..5014fec 100644 --- a/frontend/src/app/shared/components/navbar/navbar.component.ts +++ b/frontend/src/app/shared/components/navbar/navbar.component.ts @@ -12,7 +12,6 @@ import { KeycloakService } from 'keycloak-angular'; export class NavbarComponent { isMenuOpen = false; private keycloakService: KeycloakService = inject(KeycloakService); - isLoggedIn = this.keycloakService.isLoggedIn(); login() { diff --git a/frontend/src/index.html b/frontend/src/index.html index 8d60cc1..bd4ced1 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -6,8 +6,10 @@ - - + + + + diff --git a/frontend/src/styles.css b/frontend/src/styles.css index f78bf74..020d133 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -145,3 +145,6 @@ a { --mdc-dialog-supporting-text-color: var(--color-text-secondary) important; --mdc-dialog-container-shape: 6px important; } + +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } From 25492f3e68dd5a5928a72d699cd546cb1dba35f2 Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 26 Feb 2025 12:52:34 +0100 Subject: [PATCH 011/187] style: fixed prettier and hopefully eslint --- frontend/src/app/app.config.ts | 2 +- .../app/feature/deposit/deposit.component.html | 11 +++++------ .../src/app/feature/deposit/deposit.component.ts | 15 ++++++++++----- frontend/src/app/feature/home/home.component.html | 11 ++++------- frontend/src/app/feature/home/home.component.ts | 8 ++++---- frontend/src/index.html | 9 ++++++--- frontend/src/styles.css | 10 ++++++++-- 7 files changed, 38 insertions(+), 28 deletions(-) diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index d7b84bd..217efd4 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -54,6 +54,6 @@ export const appConfig: ApplicationConfig = { useClass: KeycloakBearerInterceptor, multi: true, }, - provideAnimationsAsync(), provideAnimationsAsync(), + provideAnimationsAsync(), ], }; diff --git a/frontend/src/app/feature/deposit/deposit.component.html b/frontend/src/app/feature/deposit/deposit.component.html index 06e1b72..5375ff2 100644 --- a/frontend/src/app/feature/deposit/deposit.component.html +++ b/frontend/src/app/feature/deposit/deposit.component.html @@ -1,9 +1,6 @@ - +

Guthaben aufladen

@@ -22,7 +19,10 @@
- @@ -30,4 +30,3 @@
- diff --git a/frontend/src/app/feature/deposit/deposit.component.ts b/frontend/src/app/feature/deposit/deposit.component.ts index e6545e5..a4c29b9 100644 --- a/frontend/src/app/feature/deposit/deposit.component.ts +++ b/frontend/src/app/feature/deposit/deposit.component.ts @@ -1,4 +1,12 @@ -import {ChangeDetectionStrategy, Component, EventEmitter, inject, Input, OnInit, Output} from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + inject, + Input, + OnInit, + Output, +} from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { loadStripe, Stripe } from '@stripe/stripe-js'; import { DepositService } from '../../service/deposit.service'; @@ -9,10 +17,7 @@ import { NgIf } from '@angular/common'; @Component({ selector: 'app-deposit', standalone: true, - imports: [ - ReactiveFormsModule, - NgIf, - ], + imports: [ReactiveFormsModule, NgIf], templateUrl: './deposit.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) diff --git a/frontend/src/app/feature/home/home.component.html b/frontend/src/app/feature/home/home.component.html index 011f236..bbe04ae 100644 --- a/frontend/src/app/feature/home/home.component.html +++ b/frontend/src/app/feature/home/home.component.html @@ -22,7 +22,7 @@
- +
@@ -41,7 +41,7 @@
- +
@@ -56,14 +56,11 @@
-

Konto

- + @@ -73,7 +70,7 @@
- +

Letzte Transaktionen

diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index a77109b..1d16b90 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -1,9 +1,9 @@ -import {ChangeDetectionStrategy, Component, inject} from '@angular/core'; +import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; import { NavbarComponent } from '../../shared/components/navbar/navbar.component'; import { CurrencyPipe, NgFor } from '@angular/common'; import { Game } from '../../model/Game'; import { Transaction } from '../../model/Transaction'; -import {DepositComponent} from "../deposit/deposit.component"; +import { DepositComponent } from '../deposit/deposit.component'; @Component({ selector: 'app-homepage', @@ -71,10 +71,10 @@ export default class HomeComponent { }, ]; - openDepositModal(){ + openDepositModal() { this.isDepositModalOpen = true; } - closeDepositModal(){ + closeDepositModal() { this.isDepositModalOpen = false; } } diff --git a/frontend/src/index.html b/frontend/src/index.html index bd4ced1..41fedf4 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -6,9 +6,12 @@ - - - + + + diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 020d133..e2198bc 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -146,5 +146,11 @@ a { --mdc-dialog-container-shape: 6px important; } -html, body { height: 100%; } -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } +html, +body { + height: 100%; +} +body { + margin: 0; + font-family: Roboto, 'Helvetica Neue', sans-serif; +} From 6c6e2b5cb58e91c6aa8ce86f8acd6a7a142b638e Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 26 Feb 2025 13:09:49 +0100 Subject: [PATCH 012/187] style:fixed prettier and eslint --- frontend/src/app/feature/deposit/deposit.component.html | 2 +- frontend/src/app/feature/deposit/deposit.component.ts | 2 +- frontend/src/app/feature/home/home.component.html | 3 +-- frontend/src/app/feature/home/home.component.ts | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/feature/deposit/deposit.component.html b/frontend/src/app/feature/deposit/deposit.component.html index 5375ff2..91179a3 100644 --- a/frontend/src/app/feature/deposit/deposit.component.html +++ b/frontend/src/app/feature/deposit/deposit.component.html @@ -1,5 +1,5 @@ -
+
diff --git a/frontend/src/app/feature/deposit/deposit.component.ts b/frontend/src/app/feature/deposit/deposit.component.ts index a4c29b9..7a45859 100644 --- a/frontend/src/app/feature/deposit/deposit.component.ts +++ b/frontend/src/app/feature/deposit/deposit.component.ts @@ -22,7 +22,7 @@ import { NgIf } from '@angular/common'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class DepositComponent implements OnInit { - @Input() isOpen: boolean = false; + @Input() isOpen = false; @Output() close = new EventEmitter(); protected form!: FormGroup; protected errorMsg = ''; diff --git a/frontend/src/app/feature/home/home.component.html b/frontend/src/app/feature/home/home.component.html index bbe04ae..cc1ed16 100644 --- a/frontend/src/app/feature/home/home.component.html +++ b/frontend/src/app/feature/home/home.component.html @@ -61,6 +61,7 @@

Konto

+ @@ -70,8 +71,6 @@
- -

Letzte Transaktionen

diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index 1d16b90..6400d5a 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component } from '@angular/core'; import { NavbarComponent } from '../../shared/components/navbar/navbar.component'; import { CurrencyPipe, NgFor } from '@angular/common'; import { Game } from '../../model/Game'; From a6e3ae1a337349dd78f1d64ce97fa55f1aa44dff Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 26 Feb 2025 13:22:52 +0100 Subject: [PATCH 013/187] style: removed missed angular material lines --- frontend/src/index.html | 5 +---- frontend/src/styles.css | 7 ------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/frontend/src/index.html b/frontend/src/index.html index 41fedf4..79b9bc6 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -10,9 +10,6 @@ href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet" /> - - - - + diff --git a/frontend/src/styles.css b/frontend/src/styles.css index e2198bc..946eac6 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -139,13 +139,6 @@ a { @apply text-xs; } -.mat-mdc-dialog-container { - --mdc-dialog-container-color: var(--color-deep-blue-light) important; - --mdc-dialog-subhead-color: var(--color-text-primary) important; - --mdc-dialog-supporting-text-color: var(--color-text-secondary) important; - --mdc-dialog-container-shape: 6px important; -} - html, body { height: 100%; From 65ed49df2aad321f9934c4fa4564a2aa09148568 Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 26 Feb 2025 13:26:51 +0100 Subject: [PATCH 014/187] style: removed angular material lines --- frontend/src/index.html | 8 +++----- frontend/src/styles.css | 9 --------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/frontend/src/index.html b/frontend/src/index.html index 79b9bc6..8d60cc1 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -6,10 +6,8 @@ - - + + + diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 946eac6..bfdb7fb 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -138,12 +138,3 @@ a { .footer-disclaimer { @apply text-xs; } - -html, -body { - height: 100%; -} -body { - margin: 0; - font-family: Roboto, 'Helvetica Neue', sans-serif; -} From 204970856baa4e05c8138e7e2bcf6329e64e6d2e Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 5 Mar 2025 08:57:14 +0100 Subject: [PATCH 015/187] fix: add correct redirect url after deposit --- .../java/de/szut/casino/deposit/DepositController.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/deposit/DepositController.java b/backend/src/main/java/de/szut/casino/deposit/DepositController.java index 0e1ade5..0312981 100644 --- a/backend/src/main/java/de/szut/casino/deposit/DepositController.java +++ b/backend/src/main/java/de/szut/casino/deposit/DepositController.java @@ -24,11 +24,11 @@ public class DepositController { @Value("${stripe.secret.key}") private String stripeKey; + @Value("${frontend.host}") + private String frontendHost; + @PostMapping("/deposit/checkout") - public ResponseEntity checkout( - @RequestBody @Valid AmountDto amountDto, - @RequestHeader("Origin") String origin - ) throws StripeException { + public ResponseEntity checkout(@RequestBody @Valid AmountDto amountDto) throws StripeException { Stripe.apiKey = stripeKey; SessionCreateParams params = SessionCreateParams.builder() @@ -38,7 +38,7 @@ public class DepositController { .setQuantity(1L) .setName("Einzahlung") .build()) - .setSuccessUrl(origin+"/deposit/success") + .setSuccessUrl(frontendHost+"/deposit/success") .setMode(SessionCreateParams.Mode.PAYMENT) .build(); From f011ade4a8dfcc56d1ac858e0db4cf66b458b10a Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 5 Mar 2025 08:59:34 +0100 Subject: [PATCH 016/187] fix: add frontend host to application properties --- .../src/main/java/de/szut/casino/deposit/DepositController.java | 2 +- backend/src/main/resources/application.properties | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/de/szut/casino/deposit/DepositController.java b/backend/src/main/java/de/szut/casino/deposit/DepositController.java index 0312981..08a9026 100644 --- a/backend/src/main/java/de/szut/casino/deposit/DepositController.java +++ b/backend/src/main/java/de/szut/casino/deposit/DepositController.java @@ -24,7 +24,7 @@ public class DepositController { @Value("${stripe.secret.key}") private String stripeKey; - @Value("${frontend.host}") + @Value("${app.fronend-host}") private String frontendHost; @PostMapping("/deposit/checkout") diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 268279f..7004ce8 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -4,6 +4,7 @@ spring.datasource.password=postgres_pass server.port=8080 spring.jpa.hibernate.ddl-auto=create-drop stripe.secret.key=${STRIPE_SECRET_KEY:sk_test_51QrePYIvCfqz7ANgqam8rEwWcMeKiLOof3j6SCMgu2sl4sESP45DJxca16mWcYo1sQaiBv32CMR6Z4AAAGQPCJo300ubuZKO8I} +app.fronend-host=http://localhost:3000 spring.application.name=lf12_starter #client registration configuration From c102f6ea65f8bb89cd2fc1c89f8b17efa6946edc Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 5 Mar 2025 09:00:41 +0100 Subject: [PATCH 017/187] fix: typo --- .../src/main/java/de/szut/casino/deposit/DepositController.java | 2 +- backend/src/main/resources/application.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/deposit/DepositController.java b/backend/src/main/java/de/szut/casino/deposit/DepositController.java index 08a9026..ad1caf9 100644 --- a/backend/src/main/java/de/szut/casino/deposit/DepositController.java +++ b/backend/src/main/java/de/szut/casino/deposit/DepositController.java @@ -24,7 +24,7 @@ public class DepositController { @Value("${stripe.secret.key}") private String stripeKey; - @Value("${app.fronend-host}") + @Value("${app.frontend-host}") private String frontendHost; @PostMapping("/deposit/checkout") diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 7004ce8..792244e 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -4,7 +4,7 @@ spring.datasource.password=postgres_pass server.port=8080 spring.jpa.hibernate.ddl-auto=create-drop stripe.secret.key=${STRIPE_SECRET_KEY:sk_test_51QrePYIvCfqz7ANgqam8rEwWcMeKiLOof3j6SCMgu2sl4sESP45DJxca16mWcYo1sQaiBv32CMR6Z4AAAGQPCJo300ubuZKO8I} -app.fronend-host=http://localhost:3000 +app.frontend-host=http://localhost:3000 spring.application.name=lf12_starter #client registration configuration From bba33135d543a5def323e6d6fdda5dd9522e56eb Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 5 Mar 2025 09:14:10 +0100 Subject: [PATCH 018/187] fix: change redirect route --- .../src/main/java/de/szut/casino/deposit/DepositController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/de/szut/casino/deposit/DepositController.java b/backend/src/main/java/de/szut/casino/deposit/DepositController.java index ad1caf9..c178867 100644 --- a/backend/src/main/java/de/szut/casino/deposit/DepositController.java +++ b/backend/src/main/java/de/szut/casino/deposit/DepositController.java @@ -38,7 +38,7 @@ public class DepositController { .setQuantity(1L) .setName("Einzahlung") .build()) - .setSuccessUrl(frontendHost+"/deposit/success") + .setSuccessUrl(frontendHost+"/home") .setMode(SessionCreateParams.Mode.PAYMENT) .build(); From 909dab2876076c66df3fdadb2d3256c6e0f63be6 Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Wed, 5 Mar 2025 10:17:11 +0100 Subject: [PATCH 019/187] build: update Java language version to 23 --- backend/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 76efd27..a2060f7 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -24,7 +24,7 @@ version = "0.0.1-SNAPSHOT" java { toolchain { - languageVersion = JavaLanguageVersion.of(22) + languageVersion = JavaLanguageVersion.of(23) } } From 4d251a21c34e52347f2cd07e2927ff1c5fd9f0fb Mon Sep 17 00:00:00 2001 From: Jan-Marlon Leibl Date: Wed, 5 Mar 2025 10:21:55 +0100 Subject: [PATCH 020/187] build(ci): update Java version in CI workflow --- .gitea/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 97dbeeb..76ac9aa 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -8,15 +8,15 @@ jobs: name: "Checkstyle Main" runs-on: "vps-4" container: - image: "cimg/openjdk:22.0-node" + image: "cimg/openjdk:23.0-node" steps: - name: "Checkout" uses: actions/checkout@v3 - - name: Setup Java 22 + - name: Setup Java 23 uses: actions/setup-java@v3 with: distribution: "temurin" - java-version: "22" + java-version: "23" - name: "Cache Gradle dependencies" uses: actions/cache@v3 with: From caf279448998ca848c04c3bd85fb952a6a343bdc Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 5 Mar 2025 10:20:31 +0100 Subject: [PATCH 021/187] comfirmation modal for deposit and refactoring --- .../feature/deposit/deposit.component.html | 25 +++++++------------ .../src/app/feature/home/home.component.html | 8 +++--- .../src/app/feature/home/home.component.ts | 3 ++- .../feature/landing/landing.component.html | 14 +++++------ .../confirmation/confirmation.component.html | 14 +++++++++++ .../confirmation/confirmation.component.ts | 16 ++++++++++++ .../components/navbar/navbar.component.html | 8 +++--- frontend/src/styles.css | 18 ++++++++++++- 8 files changed, 74 insertions(+), 32 deletions(-) create mode 100644 frontend/src/app/shared/components/confirmation/confirmation.component.html create mode 100644 frontend/src/app/shared/components/confirmation/confirmation.component.ts diff --git a/frontend/src/app/feature/deposit/deposit.component.html b/frontend/src/app/feature/deposit/deposit.component.html index 91179a3..1fd4318 100644 --- a/frontend/src/app/feature/deposit/deposit.component.html +++ b/frontend/src/app/feature/deposit/deposit.component.html @@ -1,13 +1,11 @@ - -
-
-

Guthaben aufladen

+@if (isOpen){ +
@@ -47,7 +47,7 @@ >

{{ game.name }}

- +
@@ -60,7 +60,7 @@

Konto

- +
+ +

Letzte Transaktionen

diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index 6400d5a..699b3cf 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -4,11 +4,12 @@ import { CurrencyPipe, NgFor } from '@angular/common'; import { Game } from '../../model/Game'; import { Transaction } from '../../model/Transaction'; import { DepositComponent } from '../deposit/deposit.component'; +import {ConfirmationComponent} from "../../shared/components/confirmation/confirmation.component"; @Component({ selector: 'app-homepage', standalone: true, - imports: [NavbarComponent, CurrencyPipe, NgFor, DepositComponent], + imports: [NavbarComponent, CurrencyPipe, NgFor, DepositComponent, ConfirmationComponent], templateUrl: './home.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) diff --git a/frontend/src/app/feature/landing/landing.component.html b/frontend/src/app/feature/landing/landing.component.html index 597c71a..bffa9ad 100644 --- a/frontend/src/app/feature/landing/landing.component.html +++ b/frontend/src/app/feature/landing/landing.component.html @@ -10,7 +10,7 @@
200% bis zu 500€

+ 200 Freispiele

-
@@ -28,21 +28,21 @@

Slots

Klassische Spielautomaten

- +

Plinko

Spannendes Geschicklichkeitsspiel

- +
@@ -52,21 +52,21 @@

Poker

Texas Hold'em & mehr

- +

Liars Dice

Würfelspiel mit Strategie

- +
diff --git a/frontend/src/app/shared/components/confirmation/confirmation.component.html b/frontend/src/app/shared/components/confirmation/confirmation.component.html new file mode 100644 index 0000000..549a3c4 --- /dev/null +++ b/frontend/src/app/shared/components/confirmation/confirmation.component.html @@ -0,0 +1,14 @@ +@if (successful) { + + +} diff --git a/frontend/src/app/shared/components/confirmation/confirmation.component.ts b/frontend/src/app/shared/components/confirmation/confirmation.component.ts new file mode 100644 index 0000000..be3c76a --- /dev/null +++ b/frontend/src/app/shared/components/confirmation/confirmation.component.ts @@ -0,0 +1,16 @@ +import {Component, EventEmitter, Input, Output} from '@angular/core'; + +@Component({ + selector: 'app-confirmation', + standalone: true, + imports: [], + templateUrl: './confirmation.component.html', +}) +export class ConfirmationComponent { + @Input() successful: boolean = true; + @Output() close = new EventEmitter(); + + public closeModal(){ + this.close.emit(); + } +} diff --git a/frontend/src/app/shared/components/navbar/navbar.component.html b/frontend/src/app/shared/components/navbar/navbar.component.html index b3e3df3..0294aa0 100644 --- a/frontend/src/app/shared/components/navbar/navbar.component.html +++ b/frontend/src/app/shared/components/navbar/navbar.component.html @@ -12,10 +12,10 @@ @@ -58,10 +58,10 @@ Spiele
@if (!isLoggedIn) { - + } @if (isLoggedIn) { - + }
diff --git a/frontend/src/styles.css b/frontend/src/styles.css index bfdb7fb..5693d6b 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -31,10 +31,14 @@ a { @apply bg-deep-blue-contrast rounded-lg overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300; } -.button-base { +.button-primary { @apply bg-emerald hover:bg-emerald-dark text-text-primary transition-all duration-300 active:scale-95 rounded; } +.button-secondary { + @apply bg-deep-blue-light hover:bg-deep-blue-contrast w-full py-2 rounded my-2; +} + .game-card-content { @apply p-4; } @@ -138,3 +142,15 @@ a { .footer-disclaimer { @apply text-xs; } + +.modal-bg { + @apply fixed inset-0 bg-black/70 z-50 focus:outline-none focus:ring-2 focus:ring-emerald-light; +} + +.modal-card { + @apply bg-deep-blue-contrast overflow-hidden hover:shadow-xl transition-shadow duration-300 p-4 fixed top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 p-6 rounded-lg shadow-lg z-50 min-w-[300px]; +} + +.modal-heading { + @apply text-xl font-bold text-text-primary; +} From 95889fc93755fa1e037c506c9c8f0fec1edd0db9 Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 5 Mar 2025 10:34:08 +0100 Subject: [PATCH 022/187] fix: closing of deposit confirmation modal --- frontend/src/app/feature/home/home.component.html | 2 +- frontend/src/app/feature/home/home.component.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/feature/home/home.component.html b/frontend/src/app/feature/home/home.component.html index 4677ca9..ace0c10 100644 --- a/frontend/src/app/feature/home/home.component.html +++ b/frontend/src/app/feature/home/home.component.html @@ -71,7 +71,7 @@
- +

Letzte Transaktionen

diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index 699b3cf..c9761da 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -15,6 +15,7 @@ import {ConfirmationComponent} from "../../shared/components/confirmation/confir }) export default class HomeComponent { isDepositModalOpen = false; + isDepositSuccessful = true; featuredGames: Game[] = [ { @@ -78,4 +79,11 @@ export default class HomeComponent { closeDepositModal() { this.isDepositModalOpen = false; } + + openDepositSuccessfulModal() { + this.isDepositSuccessful = true; + } + closeDepositSuccessfulModal() { + this.isDepositSuccessful = false; + } } From f172e00d0a7b8a15cee04eda73077b534ef2f5e3 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Wed, 5 Mar 2025 10:45:10 +0100 Subject: [PATCH 023/187] chore: add success bool to success / cancel url --- .../de/szut/casino/deposit/DepositController.java | 12 +++--------- backend/src/main/resources/application.properties | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/de/szut/casino/deposit/DepositController.java b/backend/src/main/java/de/szut/casino/deposit/DepositController.java index c178867..6bc0fbc 100644 --- a/backend/src/main/java/de/szut/casino/deposit/DepositController.java +++ b/backend/src/main/java/de/szut/casino/deposit/DepositController.java @@ -3,20 +3,13 @@ package de.szut.casino.deposit; import com.stripe.Stripe; import com.stripe.exception.StripeException; import com.stripe.model.checkout.Session; -import com.stripe.param.InvoiceItemCreateParams; -import com.stripe.param.PriceCreateParams; import com.stripe.param.checkout.SessionCreateParams; import de.szut.casino.deposit.dto.AmountDto; import de.szut.casino.deposit.dto.SessionIdDto; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.cassandra.CassandraProperties; -import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; -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 org.springframework.web.bind.annotation.*; @RestController public class DepositController { @@ -38,7 +31,8 @@ public class DepositController { .setQuantity(1L) .setName("Einzahlung") .build()) - .setSuccessUrl(frontendHost+"/home") + .setSuccessUrl(frontendHost+"/home?success=true") + .setCancelUrl(frontendHost+"/home?success=false") .setMode(SessionCreateParams.Mode.PAYMENT) .build(); diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 792244e..c7ccadf 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -4,7 +4,7 @@ spring.datasource.password=postgres_pass server.port=8080 spring.jpa.hibernate.ddl-auto=create-drop stripe.secret.key=${STRIPE_SECRET_KEY:sk_test_51QrePYIvCfqz7ANgqam8rEwWcMeKiLOof3j6SCMgu2sl4sESP45DJxca16mWcYo1sQaiBv32CMR6Z4AAAGQPCJo300ubuZKO8I} -app.frontend-host=http://localhost:3000 +app.frontend-host=http://localhost:4200 spring.application.name=lf12_starter #client registration configuration From 212bee3bd29c895c881429dfbd173d8586498e0b Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 5 Mar 2025 11:48:42 +0100 Subject: [PATCH 024/187] feat: implemented confirmation modal for depositing money --- .../src/app/feature/home/home.component.html | 2 +- .../src/app/feature/home/home.component.ts | 41 ++++++++----------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/frontend/src/app/feature/home/home.component.html b/frontend/src/app/feature/home/home.component.html index ace0c10..e8b3430 100644 --- a/frontend/src/app/feature/home/home.component.html +++ b/frontend/src/app/feature/home/home.component.html @@ -71,7 +71,7 @@
- +

Letzte Transaktionen

diff --git a/frontend/src/app/feature/home/home.component.ts b/frontend/src/app/feature/home/home.component.ts index c9761da..f1e2f17 100644 --- a/frontend/src/app/feature/home/home.component.ts +++ b/frontend/src/app/feature/home/home.component.ts @@ -1,10 +1,11 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; +import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core'; import { NavbarComponent } from '../../shared/components/navbar/navbar.component'; import { CurrencyPipe, NgFor } from '@angular/common'; import { Game } from '../../model/Game'; import { Transaction } from '../../model/Transaction'; import { DepositComponent } from '../deposit/deposit.component'; import {ConfirmationComponent} from "../../shared/components/confirmation/confirmation.component"; +import {ActivatedRoute} from "@angular/router"; @Component({ selector: 'app-homepage', @@ -13,9 +14,18 @@ import {ConfirmationComponent} from "../../shared/components/confirmation/confir templateUrl: './home.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) -export default class HomeComponent { +export default class HomeComponent implements OnInit { isDepositModalOpen = false; - isDepositSuccessful = true; + isDepositSuccessful = false; + + constructor(public route: ActivatedRoute) {} + + ngOnInit() { + this.isDepositSuccessful = this.route.snapshot.queryParams['success'] == 'true'; + if (this.isDepositSuccessful) { + this.openDepositConfirmationModal(); + } + } featuredGames: Game[] = [ { @@ -52,26 +62,7 @@ export default class HomeComponent { allGames: Game[] = [...this.featuredGames]; - recentTransactions: Transaction[] = [ - { - id: '1', - type: 'Deposit', - amount: 100.0, - date: '2024-03-20', - }, - { - id: '2', - type: 'Withdrawal', - amount: -50.0, - date: '2024-03-19', - }, - { - id: '3', - type: 'Bonus', - amount: 25.0, - date: '2024-03-18', - }, - ]; + recentTransactions: Transaction[] = []; openDepositModal() { this.isDepositModalOpen = true; @@ -80,10 +71,10 @@ export default class HomeComponent { this.isDepositModalOpen = false; } - openDepositSuccessfulModal() { + openDepositConfirmationModal() { this.isDepositSuccessful = true; } - closeDepositSuccessfulModal() { + closeDepositConfirmationModal() { this.isDepositSuccessful = false; } } From 15a92b984c73e3e634dd325ad16874695a22b3f9 Mon Sep 17 00:00:00 2001 From: Lea Date: Wed, 5 Mar 2025 12:00:32 +0100 Subject: [PATCH 025/187] style: linter and prettier --- frontend/src/app/feature/deposit/deposit.component.html | 4 ++-- frontend/src/app/feature/home/home.component.html | 5 ++++- frontend/src/app/feature/home/home.component.ts | 6 +++--- .../components/confirmation/confirmation.component.html | 9 +++------ .../components/confirmation/confirmation.component.ts | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/src/app/feature/deposit/deposit.component.html b/frontend/src/app/feature/deposit/deposit.component.html index 1fd4318..fdaf87a 100644 --- a/frontend/src/app/feature/deposit/deposit.component.html +++ b/frontend/src/app/feature/deposit/deposit.component.html @@ -1,9 +1,9 @@ -@if (isOpen){ +@if (isOpen) {
+
-