# 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 ` ## Configuration Key configuration files: - `application.properties` - Main application configuration - `SecurityConfig.java` - Security and CORS settings - `OpenAPIConfiguration.java` - API documentation setup