Merge branch 'main' into add-project-documentation
All checks were successful
CI / Get Changed Files (pull_request) Successful in 7s
CI / eslint (pull_request) Has been skipped
CI / Backend Tests (pull_request) Has been skipped
Pull Request Labeler / labeler (pull_request_target) Successful in 5s
CI / oxlint (pull_request) Has been skipped
CI / Checkstyle Main (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / Docker frontend validation (pull_request) Has been skipped
Label PRs based on size / Check PR size (pull_request) Successful in 11s
CI / test-build (pull_request) Has been skipped
CI / Docker backend validation (pull_request) Has been skipped
Claude PR Review / claude-code (pull_request) Successful in 1m30s
All checks were successful
CI / Get Changed Files (pull_request) Successful in 7s
CI / eslint (pull_request) Has been skipped
CI / Backend Tests (pull_request) Has been skipped
Pull Request Labeler / labeler (pull_request_target) Successful in 5s
CI / oxlint (pull_request) Has been skipped
CI / Checkstyle Main (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / Docker frontend validation (pull_request) Has been skipped
Label PRs based on size / Check PR size (pull_request) Successful in 11s
CI / test-build (pull_request) Has been skipped
CI / Docker backend validation (pull_request) Has been skipped
Claude PR Review / claude-code (pull_request) Successful in 1m30s
This commit is contained in:
commit
790eeeb145
8 changed files with 246 additions and 95 deletions
|
@ -1,59 +1,137 @@
|
||||||
# Starter für das LF08 Projekt
|
# Casino Gaming Platform - Backend API
|
||||||
|
|
||||||
## Requirements
|
A Spring Boot backend application providing REST APIs for a casino gaming platform with multiple games, user management, authentication, and payment processing.
|
||||||
* Docker https://docs.docker.com/get-docker/
|
|
||||||
* Docker compose (bei Windows und Mac schon in Docker enthalten) https://docs.docker.com/compose/install/
|
|
||||||
|
|
||||||
## Endpunkt
|
## Features
|
||||||
```
|
|
||||||
http://localhost:8080
|
|
||||||
```
|
|
||||||
## Swagger
|
|
||||||
```
|
|
||||||
http://localhost:8080/swagger
|
|
||||||
```
|
|
||||||
|
|
||||||
|
### Games
|
||||||
|
- **Blackjack** - Classic card game with deck management
|
||||||
|
- **Coinflip** - Simple heads/tails betting game
|
||||||
|
- **Dice** - Dice rolling game
|
||||||
|
- **Slots** - Slot machine with symbols and payouts
|
||||||
|
- **Lootboxes** - Reward system with configurable prizes
|
||||||
|
|
||||||
# Postgres
|
### User Management
|
||||||
### Terminal öffnen
|
- User registration and authentication
|
||||||
für alles gilt, im Terminal im Ordner docker/local sein
|
- OAuth2 integration (Google, GitHub)
|
||||||
|
- Email verification and password reset
|
||||||
|
- Balance management and transaction history
|
||||||
|
|
||||||
|
### Payment System
|
||||||
|
- Deposit functionality with webhook support
|
||||||
|
- Transaction tracking and status management
|
||||||
|
- Balance updates and fund validation
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
- **Java 17** with Spring Boot
|
||||||
|
- **Spring Security** with JWT authentication
|
||||||
|
- **Spring Data JPA** with PostgreSQL
|
||||||
|
- **OAuth2** for social login
|
||||||
|
- **Email service** for notifications
|
||||||
|
- **OpenAPI/Swagger** for API documentation
|
||||||
|
|
||||||
|
## Build & Run
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
- Java 17+
|
||||||
|
- Gradle
|
||||||
|
- Docker & Docker Compose (for PostgreSQL)
|
||||||
|
|
||||||
|
### Build Commands
|
||||||
```bash
|
```bash
|
||||||
|
# Build the application
|
||||||
|
./gradlew build
|
||||||
|
|
||||||
|
# Clean build
|
||||||
|
./gradlew clean build
|
||||||
|
|
||||||
|
# Run the application
|
||||||
|
./gradlew bootRun
|
||||||
|
|
||||||
|
# Generate JAR file
|
||||||
|
./gradlew bootJar
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
```bash
|
||||||
|
# Run all tests
|
||||||
|
./gradlew test
|
||||||
|
|
||||||
|
# Run specific test class
|
||||||
|
./gradlew test --tests "FullyQualifiedClassName"
|
||||||
|
|
||||||
|
# Run checkstyle
|
||||||
|
./gradlew checkstyleMain checkstyleTest
|
||||||
|
```
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
The application runs on `http://localhost:8080`
|
||||||
|
|
||||||
|
### API Documentation
|
||||||
|
- **Swagger UI**: `http://localhost:8080/swagger-ui.html`
|
||||||
|
- **OpenAPI Spec**: `http://localhost:8080/v3/api-docs`
|
||||||
|
|
||||||
|
### Main Endpoints
|
||||||
|
- `/api/auth/**` - Authentication and user management
|
||||||
|
- `/api/games/blackjack/**` - Blackjack game operations
|
||||||
|
- `/api/games/coinflip/**` - Coinflip game operations
|
||||||
|
- `/api/games/dice/**` - Dice game operations
|
||||||
|
- `/api/games/slots/**` - Slot machine operations
|
||||||
|
- `/api/lootboxes/**` - Lootbox management
|
||||||
|
- `/api/deposits/**` - Payment and deposit handling
|
||||||
|
- `/api/users/**` - User profile management
|
||||||
|
- `/api/health` - Health check endpoint
|
||||||
|
|
||||||
|
## Database Setup
|
||||||
|
|
||||||
|
### PostgreSQL with Docker
|
||||||
|
```bash
|
||||||
|
# Start PostgreSQL container
|
||||||
cd docker/local
|
cd docker/local
|
||||||
```
|
|
||||||
### Postgres starten
|
|
||||||
```bash
|
|
||||||
docker compose up
|
docker compose up
|
||||||
```
|
|
||||||
Achtung: Der Docker-Container läuft dauerhaft! Wenn er nicht mehr benötigt wird, sollten Sie ihn stoppen.
|
|
||||||
|
|
||||||
### Postgres stoppen
|
# Stop PostgreSQL container
|
||||||
```bash
|
|
||||||
docker compose down
|
docker compose down
|
||||||
```
|
|
||||||
|
|
||||||
### Postgres Datenbank wipen, z.B. bei Problemen
|
# Reset database (if needed)
|
||||||
```bash
|
|
||||||
docker compose down
|
docker compose down
|
||||||
docker volume rm local_lf8_starter_postgres_data
|
docker volume rm local_lf8_starter_postgres_data
|
||||||
docker compose up
|
docker compose up
|
||||||
```
|
```
|
||||||
|
|
||||||
### Intellij-Ansicht für Postgres Datenbank einrichten
|
### Database Configuration
|
||||||
```bash
|
Database connection settings are configured in `src/main/resources/application.properties`
|
||||||
1. Lasse den Docker-Container mit der PostgreSQL-Datenbank laufen
|
|
||||||
2. im Ordner resources die Datei application.properties öffnen und die URL der Datenbank kopieren
|
|
||||||
3. rechts im Fenster den Reiter Database öffnen
|
|
||||||
4. In der Database-Symbolleiste auf das Datenbanksymbol mit dem Schlüssel klicken
|
|
||||||
5. auf das Pluszeichen klicken
|
|
||||||
6. Datasource from URL auswählen
|
|
||||||
7. URL der DB einfügen und PostgreSQL-Treiber auswählen, mit OK bestätigen
|
|
||||||
8. Username lf8_starter und Passwort secret eintragen (siehe application.properties), mit Apply bestätigen
|
|
||||||
9. im Reiter Schemas alle Häkchen entfernen und lediglich vor lf8_starter_db und public Häkchen setzen
|
|
||||||
10. mit Apply und ok bestätigen
|
|
||||||
```
|
|
||||||
# Keycloak
|
|
||||||
|
|
||||||
### Keycloak Token
|
### IntelliJ Database Setup
|
||||||
1. Auf der Projektebene [GetBearerToken.http](../GetBearerToken.http) öffnen.
|
1. Start the PostgreSQL Docker container
|
||||||
2. Neben der Request auf den grünen Pfeil drücken
|
2. Open `application.properties` and copy the database URL
|
||||||
3. Aus dem Reponse das access_token kopieren
|
3. In IntelliJ, open the Database tab (right panel)
|
||||||
|
4. Click the database icon with key in the toolbar
|
||||||
|
5. Click the plus (+) icon
|
||||||
|
6. Select "Datasource from URL"
|
||||||
|
7. Paste the database URL and select PostgreSQL driver
|
||||||
|
8. Enter credentials (username: `lf8_starter`, password: `secret`)
|
||||||
|
9. In Schemas tab, uncheck all except `lf8_starter_db` and `public`
|
||||||
|
10. Apply and confirm
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
The application supports multiple authentication methods:
|
||||||
|
- JWT-based authentication
|
||||||
|
- OAuth2 (Google, GitHub)
|
||||||
|
- Email/password with verification
|
||||||
|
|
||||||
|
### Getting Bearer Token
|
||||||
|
For API testing, use the provided HTTP client file:
|
||||||
|
1. Open `GetBearerToken.http` at project root
|
||||||
|
2. Execute the request
|
||||||
|
3. Copy the `access_token` from the response
|
||||||
|
4. Use in Authorization header: `Bearer <token>`
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Key configuration files:
|
||||||
|
- `application.properties` - Main application configuration
|
||||||
|
- `SecurityConfig.java` - Security and CORS settings
|
||||||
|
- `OpenAPIConfiguration.java` - API documentation setup
|
|
@ -39,7 +39,7 @@ repositories {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("com.stripe:stripe-java:29.1.0")
|
implementation("com.stripe:stripe-java:29.2.0")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||||
compileOnly("org.projectlombok:lombok")
|
compileOnly("org.projectlombok:lombok")
|
||||||
|
@ -47,13 +47,13 @@ dependencies {
|
||||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-security")
|
implementation("org.springframework.boot:spring-boot-starter-security")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-oauth2-resource-server:3.4.5")
|
implementation("org.springframework.boot:spring-boot-starter-oauth2-resource-server:3.5.0")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-oauth2-client:3.4.5")
|
implementation("org.springframework.boot:spring-boot-starter-oauth2-client:3.5.0")
|
||||||
runtimeOnly("org.postgresql:postgresql")
|
runtimeOnly("org.postgresql:postgresql")
|
||||||
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.8")
|
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.8")
|
||||||
implementation("io.jsonwebtoken:jjwt-api:0.11.5")
|
implementation("io.jsonwebtoken:jjwt-api:0.12.6")
|
||||||
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")
|
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.12.6")
|
||||||
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")
|
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.12.6")
|
||||||
implementation("org.springframework.boot:spring-boot-starter-mail")
|
implementation("org.springframework.boot:spring-boot-starter-mail")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ public class JwtUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Claims extractAllClaims(String token) {
|
private Claims extractAllClaims(String token) {
|
||||||
return Jwts.parserBuilder()
|
return Jwts.parser()
|
||||||
.setSigningKey(getSigningKey())
|
.setSigningKey(getSigningKey())
|
||||||
.build()
|
.build()
|
||||||
.parseClaimsJws(token)
|
.parseClaimsJws(token)
|
||||||
|
|
|
@ -1,18 +1,106 @@
|
||||||
# Casino Gaming Platform - Frontend
|
# Casino Gaming Platform - Frontend
|
||||||
|
|
||||||
This is the frontend application for the Casino Gaming Platform. It's built with Angular 18 and TailwindCSS, providing a responsive and modern UI for the casino gaming experience.
|
A modern Angular 20 casino gaming platform featuring multiple games including Blackjack, Coinflip, Dice, Slots, and Lootboxes. Built with Angular 20, TailwindCSS 4, and powered by Bun for fast development.
|
||||||
|
|
||||||
## Development
|
## 🎮 Features
|
||||||
|
|
||||||
### Commands
|
- **Multiple Games**: Blackjack, Coinflip, Dice, Slots, Lootboxes
|
||||||
|
- **User Authentication**: OAuth2, email verification, password recovery
|
||||||
|
- **Real-time Gaming**: Interactive game mechanics with animations
|
||||||
|
- **Payment Integration**: Stripe integration for deposits
|
||||||
|
- **Responsive Design**: Mobile-first design with TailwindCSS
|
||||||
|
- **Audio Experience**: Game sounds and audio feedback
|
||||||
|
- **Transaction History**: Complete betting and transaction tracking
|
||||||
|
|
||||||
- **Build**: `bun run build` or `bunx @angular/cli build`
|
## 🚀 Getting Started
|
||||||
- **Start Dev Server**: `bun run start` or `bunx @angular/cli serve --proxy-config src/proxy.conf.json`
|
|
||||||
- **Format Code**: `bun run format` or `prettier --write "src/**/*.{ts,html,css,scss}"`
|
### Prerequisites
|
||||||
- **Lint**: `bun run lint` or `ng lint`
|
|
||||||
- **Test**: `bun run test` or `bunx @angular/cli test`
|
- [Bun](https://bun.sh/) (recommended) or Node.js 18+
|
||||||
|
- Angular CLI 20+
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install dependencies
|
||||||
|
bun install
|
||||||
|
|
||||||
|
# Start development server
|
||||||
|
bun run start
|
||||||
|
```
|
||||||
|
|
||||||
|
The app will be available at `http://localhost:4200`
|
||||||
|
|
||||||
|
## 📋 Commands
|
||||||
|
|
||||||
|
### Development
|
||||||
|
- **Start Dev Server**: `bun run start` - Starts dev server with proxy configuration
|
||||||
|
- **Build**: `bun run build` - Production build
|
||||||
|
- **Watch Build**: `bun run watch` - Development build with file watching
|
||||||
|
|
||||||
|
### Code Quality
|
||||||
|
- **Format**: `bun run format` - Format code with Prettier
|
||||||
|
- **Format Check**: `bun run format:check` - Check code formatting
|
||||||
|
- **Lint**: `bun run lint` - Run ESLint
|
||||||
|
- **OxLint**: `bun run oxlint` - Run OxLint with strict warnings
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
- **Test All**: `bun run test` - Run all tests with Karma/Jasmine
|
||||||
- **Test Single File**: `bunx @angular/cli test --include=path/to/test.spec.ts`
|
- **Test Single File**: `bunx @angular/cli test --include=path/to/test.spec.ts`
|
||||||
|
|
||||||
|
## 🛠️ Technology Stack
|
||||||
|
|
||||||
|
### Core
|
||||||
|
- **Angular 20**: Latest Angular framework with standalone components
|
||||||
|
- **TypeScript 5.8**: Strongly typed JavaScript
|
||||||
|
- **RxJS 7.8**: Reactive programming for HTTP and state management
|
||||||
|
|
||||||
|
### Styling & UI
|
||||||
|
- **TailwindCSS 4**: Utility-first CSS framework
|
||||||
|
- **PostCSS**: CSS processing and optimization
|
||||||
|
- **FontAwesome**: Icon library with Angular integration
|
||||||
|
|
||||||
|
### Animation & Interaction
|
||||||
|
- **GSAP**: High-performance animations
|
||||||
|
- **CountUp.js**: Number animation effects
|
||||||
|
- **Custom Audio Service**: Game sound effects and feedback
|
||||||
|
|
||||||
|
### Development Tools
|
||||||
|
- **Bun**: Fast JavaScript runtime and package manager
|
||||||
|
- **ESLint + Angular ESLint**: Code linting with Angular-specific rules
|
||||||
|
- **OxLint**: Fast Rust-based linter
|
||||||
|
- **Prettier**: Code formatting
|
||||||
|
- **Karma + Jasmine**: Testing framework
|
||||||
|
|
||||||
|
### Payment & APIs
|
||||||
|
- **Stripe**: Payment processing integration
|
||||||
|
- **Custom HTTP Interceptors**: API communication and error handling
|
||||||
|
|
||||||
|
## 🏗️ Architecture
|
||||||
|
|
||||||
|
### Project Structure
|
||||||
|
```
|
||||||
|
src/
|
||||||
|
├── app/
|
||||||
|
│ ├── feature/ # Feature modules
|
||||||
|
│ │ ├── auth/ # Authentication (login, register, OAuth2)
|
||||||
|
│ │ ├── game/ # Game modules (blackjack, coinflip, dice, slots)
|
||||||
|
│ │ ├── lootboxes/ # Lootbox system
|
||||||
|
│ │ └── deposit/ # Payment and deposits
|
||||||
|
│ ├── model/ # Data models and interfaces
|
||||||
|
│ ├── service/ # Core services (auth, user, transaction)
|
||||||
|
│ └── shared/ # Shared components, directives, services
|
||||||
|
├── environments/ # Environment configurations
|
||||||
|
└── public/ # Static assets (images, sounds)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Components
|
||||||
|
- **Game Components**: Modular game implementations with services
|
||||||
|
- **Shared Components**: Reusable UI components (navbar, footer, modals)
|
||||||
|
- **Services**: Business logic and API communication
|
||||||
|
- **Guards**: Route protection and authentication
|
||||||
|
- **Interceptors**: HTTP request/response handling
|
||||||
|
|
||||||
## Style Guide
|
## Style Guide
|
||||||
|
|
||||||
### Color Palette
|
### Color Palette
|
||||||
|
|
|
@ -62,15 +62,13 @@ export const routes: Routes = [
|
||||||
loadComponent: () =>
|
loadComponent: () =>
|
||||||
import('./feature/lootboxes/lootbox-selection/lootbox-selection.component'),
|
import('./feature/lootboxes/lootbox-selection/lootbox-selection.component'),
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
children: [
|
},
|
||||||
{
|
{
|
||||||
path: 'open/:id',
|
path: 'lootboxes/open/:id',
|
||||||
loadComponent: () =>
|
loadComponent: () =>
|
||||||
import('./feature/lootboxes/lootbox-opening/lootbox-opening.component'),
|
import('./feature/lootboxes/lootbox-opening/lootbox-opening.component'),
|
||||||
canActivate: [authGuard],
|
canActivate: [authGuard],
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: 'dice',
|
path: 'dice',
|
||||||
loadComponent: () => import('./feature/game/dice/dice.component'),
|
loadComponent: () => import('./feature/game/dice/dice.component'),
|
||||||
|
|
|
@ -64,20 +64,20 @@
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="hidden lg:block card">
|
||||||
|
|
||||||
<div class="slider-grid">
|
|
||||||
<div class="card">
|
|
||||||
<div class="game-card-content">
|
<div class="game-card-content">
|
||||||
<h3 class="game-heading-sm">Poker</h3>
|
<h3 class="game-heading-sm">Coinflip</h3>
|
||||||
<p class="game-text">Texas Hold'em & mehr</p>
|
<p class="game-text">Münzwurf</p>
|
||||||
<a
|
<a
|
||||||
routerLink="/game/poker"
|
routerLink="game/blackjack"
|
||||||
class="button-primary w-full py-2 inline-block text-center"
|
class="button-primary w-full py-2 inline-block text-center"
|
||||||
>Jetzt Spielen</a
|
>Jetzt Spielen</a
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="slider-grid">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="game-card-content">
|
<div class="game-card-content">
|
||||||
<h3 class="game-heading-sm">Dice</h3>
|
<h3 class="game-heading-sm">Dice</h3>
|
||||||
|
@ -165,7 +165,7 @@
|
||||||
|
|
||||||
<div class="stat-container">
|
<div class="stat-container">
|
||||||
<div class="stat-number">24/7</div>
|
<div class="stat-number">24/7</div>
|
||||||
<div class="stat-text">Support <span class="text-emerald text-xs">*</span></div>
|
<div class="stat-text">Support</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,24 +5,19 @@
|
||||||
<h3 class="footer-heading">Casino Spiele</h3>
|
<h3 class="footer-heading">Casino Spiele</h3>
|
||||||
<ul class="space-y-3">
|
<ul class="space-y-3">
|
||||||
<li>
|
<li>
|
||||||
<a routerLink="/games" class="footer-link">Slots</a>
|
<a routerLink="/game/slots" class="footer-link">Slots</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a routerLink="/games" class="footer-link">Blackjack</a>
|
<a routerLink="/game/blackjack" class="footer-link">Blackjack</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a routerLink="/games" class="footer-link">Poker</a>
|
<a routerLink="/game/dice" class="footer-link">Dice</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a routerLink="/games" class="footer-link">Liars Dice</a>
|
<a routerLink="/game/coinflip" class="footer-link">Coinflip</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer-section">
|
|
||||||
<h3 class="footer-heading">Andere Spiele</h3>
|
|
||||||
<ul class="space-y-3">
|
|
||||||
<li>
|
<li>
|
||||||
<a routerLink="/games" class="footer-link">Lootboxen</a>
|
<a routerLink="/game/lootboxes" class="footer-link">Lootboxen</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -54,10 +49,6 @@
|
||||||
<fa-icon [icon]="faGooglePay" class="footer-payment-icon"></fa-icon>
|
<fa-icon [icon]="faGooglePay" class="footer-payment-icon"></fa-icon>
|
||||||
<span class="footer-payment-text">Google Pay</span>
|
<span class="footer-payment-text">Google Pay</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-payment-method">
|
|
||||||
<fa-icon [icon]="faApplePay" class="footer-payment-icon"></fa-icon>
|
|
||||||
<span class="footer-payment-text">Apple Pay</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -65,10 +56,6 @@
|
||||||
<div class="mt-12 pt-8 border-t border-deep-blue-light">
|
<div class="mt-12 pt-8 border-t border-deep-blue-light">
|
||||||
<div class="flex flex-col md:flex-row justify-between items-center">
|
<div class="flex flex-col md:flex-row justify-between items-center">
|
||||||
<div class="footer-copyright">
|
<div class="footer-copyright">
|
||||||
<span class="footer-disclaimer">
|
|
||||||
<span class="text-emerald">*</span> nicht vorhanden.
|
|
||||||
</span>
|
|
||||||
<br />
|
|
||||||
© {{ currentYear }} Trustworthy Casino. Keine Rechte vorbehalten.
|
© {{ currentYear }} Trustworthy Casino. Keine Rechte vorbehalten.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
||||||
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
||||||
import { faCreditCard, faMoneyBillTransfer, faWallet } from '@fortawesome/free-solid-svg-icons';
|
import { faCreditCard, faMoneyBillTransfer, faWallet } from '@fortawesome/free-solid-svg-icons';
|
||||||
import { faApplePay, faGooglePay, faPaypal } from '@fortawesome/free-brands-svg-icons';
|
import { faGooglePay, faPaypal } from '@fortawesome/free-brands-svg-icons';
|
||||||
|
import { RouterLink } from '@angular/router';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-footer',
|
selector: 'app-footer',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
templateUrl: './footer.component.html',
|
templateUrl: './footer.component.html',
|
||||||
imports: [FontAwesomeModule],
|
imports: [FontAwesomeModule, RouterLink],
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class FooterComponent {
|
export class FooterComponent {
|
||||||
|
@ -18,5 +19,4 @@ export class FooterComponent {
|
||||||
faMoneyBillTransfer = faMoneyBillTransfer;
|
faMoneyBillTransfer = faMoneyBillTransfer;
|
||||||
faWallet = faWallet;
|
faWallet = faWallet;
|
||||||
faGooglePay = faGooglePay;
|
faGooglePay = faGooglePay;
|
||||||
faApplePay = faApplePay;
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue