# Casino Gaming Platform - Backend API

A Spring Boot backend application providing REST APIs for a casino gaming platform with multiple games, user management, authentication, and payment processing.

## Features

### 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

### User Management
- User registration and authentication
- 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
# 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
docker compose up

# Stop PostgreSQL container
docker compose down

# Reset database (if needed)
docker compose down
docker volume rm local_lf8_starter_postgres_data
docker compose up
```

### Database Configuration
Database connection settings are configured in `src/main/resources/application.properties`

### IntelliJ Database Setup
1. Start the PostgreSQL Docker container
2. Open `application.properties` and copy the database URL
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