# Casino Gaming Platform

An online gaming platform offering various casino-style games with virtual currency support. This project features a modern tech stack with Angular frontend, Spring Boot backend, and complete user authentication.

Please refer to our [Style Guide](https://git.kjan.de/SZUT/casino/wiki/Frontend#design-system) for design guidelines and component standards.

## Features

- Multiple casino games: Poker, Blackjack, Slots, Plinko, Liars Dice, and Lootboxes
- User authentication and account management via Keycloak
- Virtual currency deposit system using Stripe payments
- Transaction history tracking
- Responsive modern UI built with Angular and TailwindCSS

## Tech Stack

### Frontend

- Angular 20
- TailwindCSS
- Keycloak integration
- Stripe payment integration

### Backend

- Spring Boot (Java)
- PostgreSQL database
- Keycloak for authentication/authorization
- Stripe API for payment processing

### Infrastructure

- Docker containerization for all services

## Getting Started

### Prerequisites

- [Docker](https://docs.docker.com/get-docker/)
- [Docker Compose](https://docs.docker.com/compose/install/) (included with Docker Desktop for Windows and Mac)
- Java JDK 17+
- Node.js 18+

### Setting Up the Environment

1. Clone the repository

```bash
git clone <repository-url>
cd casino
```

2. Start the Docker services

```bash
cd docker
docker-compose up -d
```

This will start:

- PostgreSQL database
- Keycloak authentication server

### Running the Backend

1. Navigate to the backend directory

```bash
cd backend
```

2. Start the Spring Boot application

```bash
./gradlew bootRun
```

You may optionally install [watchexec](https://github.com/watchexec/watchexec?tab=readme-ov-file) and use this command to autorecompile the backend on file changes:

```bash
watchexec -r -e java ./gradlew :bootRun
```

The backend will be available at:

- API endpoint: <http://localhost:8080>
- Swagger documentation: <http://localhost:8080/swagger>

### Running the Frontend

1. Navigate to the frontend directory

```bash
cd frontend
```

2. Install dependencies

```bash
npm install
```

3. Start the development server

```bash
npm run dev
```

The frontend will be available at <http://localhost:4200>

### Local Stripe integration

1. Install the Stripe CLI
   <https://stripe.com/docs/stripe-cli>

2. Login to the casino stripe account

```
stripe login --api-key <casino-stripe-secret-key>
```

3. Start webhook forwarding

```
stripe listen --forward-to localhost:8080/webhook
```

## Database Management

### Postgres Management

#### Database cleanup (if needed)

```bash
cd docker
docker-compose down
docker volume rm local_lf8_starter_postgres_data
docker-compose up -d
```

#### Setting up IntelliJ Database View

1. Run the Docker container with PostgreSQL database
2. Open `application.properties` in the resources folder and copy the database URL
3. Open the Database tab in IntelliJ
4. Click on the database icon with key in the Database toolbar
5. Click the plus sign and select "Datasource from URL"
6. Paste the DB URL and select PostgreSQL driver, confirm with OK
7. Enter username `lf8_starter` and password `secret`
8. In the Schemas tab, uncheck all options and only check `lf8_starter_db` and `public`

## Authentication

The application uses Keycloak for authentication. To get a bearer token for API testing:

1. Open `requests/getBearerToken.http`
2. Click the green arrow next to the request
3. Copy the `access_token` from the response

## Development Guidelines

### Commit Message Format

We follow semantic commit messages to maintain clear project history.

Format: `<type>(<scope>): <subject>`

Where `<type>` is one of:

- `feat`: New feature
- `fix`: Bug fix
- `docs`: Documentation changes
- `style`: Formatting, missing semicolons, etc; no code change
- `refactor`: Code refactoring
- `test`: Adding or refactoring tests
- `chore`: Updating build tasks, etc; no production code change

Examples:

```
feat: add user balance display
fix(auth): resolve token expiration issue
docs: update API documentation
```

References:

- [Conventional Commits](https://www.conventionalcommits.org/)
- [Semantic Commit Messages](https://seesparkbox.com/foundry/semantic_commit_messages)

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
