feat(lootboxes): add balance check for opening lootboxes
Some checks failed
CI / Docker backend validation (pull_request) Successful in 11s
CI / Get Changed Files (pull_request) Successful in 36s
CI / Docker frontend validation (pull_request) Successful in 42s
CI / Checkstyle Main (pull_request) Has been skipped
CI / oxlint (pull_request) Successful in 30s
CI / prettier (pull_request) Failing after 30s
CI / eslint (pull_request) Successful in 38s
CI / test-build (pull_request) Successful in 33s
Some checks failed
CI / Docker backend validation (pull_request) Successful in 11s
CI / Get Changed Files (pull_request) Successful in 36s
CI / Docker frontend validation (pull_request) Successful in 42s
CI / Checkstyle Main (pull_request) Has been skipped
CI / oxlint (pull_request) Successful in 30s
CI / prettier (pull_request) Failing after 30s
CI / eslint (pull_request) Successful in 38s
CI / test-build (pull_request) Successful in 33s
This commit is contained in:
parent
bca2649afd
commit
790485decc
4 changed files with 78 additions and 8 deletions
|
@ -5,6 +5,8 @@ import { LootboxService } from '../services/lootbox.service';
|
|||
import { LootBox } from 'app/model/LootBox';
|
||||
import { Router } from '@angular/router';
|
||||
import { timeout } from 'rxjs';
|
||||
import { UserService } from '@service/user.service';
|
||||
import { User } from 'app/model/User';
|
||||
|
||||
@Component({
|
||||
selector: 'app-lootbox-selection',
|
||||
|
@ -17,6 +19,7 @@ export default class LootboxSelectionComponent implements OnInit {
|
|||
lootboxes: LootBox[] = [];
|
||||
isLoading = true;
|
||||
error = '';
|
||||
currentUser: User | null = null;
|
||||
|
||||
// Fallback data in case the API call fails
|
||||
fallbackLootboxes: LootBox[] = [
|
||||
|
@ -86,11 +89,16 @@ export default class LootboxSelectionComponent implements OnInit {
|
|||
constructor(
|
||||
private lootboxService: LootboxService,
|
||||
private router: Router,
|
||||
private cdr: ChangeDetectorRef
|
||||
private cdr: ChangeDetectorRef,
|
||||
private userService: UserService
|
||||
) {}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.loadLootboxes();
|
||||
this.userService.currentUser$.subscribe(user => {
|
||||
this.currentUser = user;
|
||||
this.cdr.detectChanges();
|
||||
});
|
||||
}
|
||||
|
||||
loadLootboxes(): void {
|
||||
|
@ -120,6 +128,24 @@ export default class LootboxSelectionComponent implements OnInit {
|
|||
}
|
||||
|
||||
openLootbox(lootboxId: number): void {
|
||||
const lootbox = this.lootboxes.find(box => box.id === lootboxId);
|
||||
|
||||
if (!lootbox) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.currentUser || this.currentUser.balance < lootbox.price) {
|
||||
this.error = 'Nicht genug Guthaben, um diese Lootbox zu öffnen.';
|
||||
// Scroll to top to see the error message
|
||||
window.scrollTo(0, 0);
|
||||
this.cdr.detectChanges();
|
||||
setTimeout(() => {
|
||||
this.error = '';
|
||||
this.cdr.detectChanges();
|
||||
}, 5000);
|
||||
return;
|
||||
}
|
||||
|
||||
this.router.navigate(['/game/lootboxes/open', lootboxId]);
|
||||
}
|
||||
|
||||
|
@ -136,4 +162,8 @@ export default class LootboxSelectionComponent implements OnInit {
|
|||
formatProbability(probability: number): string {
|
||||
return (probability * 100).toFixed(0) + '%';
|
||||
}
|
||||
|
||||
hasEnoughBalance(price: number): boolean {
|
||||
return !!this.currentUser && this.currentUser.balance >= price;
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue