Compare commits
8 commits
Author | SHA1 | Date | |
---|---|---|---|
202c5fb93f |
|||
3acd131b20 | |||
52c61c5b18 | |||
b66d39cbac | |||
16b052c0f3 | |||
d68e907061 |
|||
fb41de95b8 |
|||
02f87c177d |
4 changed files with 522 additions and 414 deletions
40
README.md
40
README.md
|
@ -15,96 +15,113 @@ Please refer to our [Style Guide](https://git.kjan.de/SZUT/casino/wiki/Frontend#
|
||||||
## Tech Stack
|
## Tech Stack
|
||||||
|
|
||||||
### Frontend
|
### Frontend
|
||||||
- Angular 19
|
|
||||||
|
- Angular 20
|
||||||
- TailwindCSS
|
- TailwindCSS
|
||||||
- Keycloak integration
|
- Keycloak integration
|
||||||
- Stripe payment integration
|
- Stripe payment integration
|
||||||
|
|
||||||
### Backend
|
### Backend
|
||||||
|
|
||||||
- Spring Boot (Java)
|
- Spring Boot (Java)
|
||||||
- PostgreSQL database
|
- PostgreSQL database
|
||||||
- Keycloak for authentication/authorization
|
- Keycloak for authentication/authorization
|
||||||
- Stripe API for payment processing
|
- Stripe API for payment processing
|
||||||
|
|
||||||
### Infrastructure
|
### Infrastructure
|
||||||
|
|
||||||
- Docker containerization for all services
|
- Docker containerization for all services
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
* [Docker](https://docs.docker.com/get-docker/)
|
|
||||||
* [Docker Compose](https://docs.docker.com/compose/install/) (included with Docker Desktop for Windows and Mac)
|
- [Docker](https://docs.docker.com/get-docker/)
|
||||||
* Java JDK 17+
|
- [Docker Compose](https://docs.docker.com/compose/install/) (included with Docker Desktop for Windows and Mac)
|
||||||
* Node.js 18+
|
- Java JDK 17+
|
||||||
|
- Node.js 18+
|
||||||
|
|
||||||
### Setting Up the Environment
|
### Setting Up the Environment
|
||||||
|
|
||||||
1. Clone the repository
|
1. Clone the repository
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone <repository-url>
|
git clone <repository-url>
|
||||||
cd casino
|
cd casino
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Start the Docker services
|
2. Start the Docker services
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd docker
|
cd docker
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
This will start:
|
This will start:
|
||||||
|
|
||||||
- PostgreSQL database
|
- PostgreSQL database
|
||||||
- Keycloak authentication server
|
- Keycloak authentication server
|
||||||
|
|
||||||
### Running the Backend
|
### Running the Backend
|
||||||
|
|
||||||
1. Navigate to the backend directory
|
1. Navigate to the backend directory
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd backend
|
cd backend
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Start the Spring Boot application
|
2. Start the Spring Boot application
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./gradlew bootRun
|
./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:
|
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
|
```bash
|
||||||
watchexec -r -e java ./gradlew :bootRun
|
watchexec -r -e java ./gradlew :bootRun
|
||||||
```
|
```
|
||||||
|
|
||||||
The backend will be available at:
|
The backend will be available at:
|
||||||
- API endpoint: http://localhost:8080
|
|
||||||
- Swagger documentation: http://localhost:8080/swagger
|
- API endpoint: <http://localhost:8080>
|
||||||
|
- Swagger documentation: <http://localhost:8080/swagger>
|
||||||
|
|
||||||
### Running the Frontend
|
### Running the Frontend
|
||||||
|
|
||||||
1. Navigate to the frontend directory
|
1. Navigate to the frontend directory
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd frontend
|
cd frontend
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Install dependencies
|
2. Install dependencies
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install
|
npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Start the development server
|
3. Start the development server
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
The frontend will be available at http://localhost:4200
|
The frontend will be available at <http://localhost:4200>
|
||||||
|
|
||||||
### Local Stripe integration
|
### Local Stripe integration
|
||||||
|
|
||||||
1. Install the Stripe CLI
|
1. Install the Stripe CLI
|
||||||
https://stripe.com/docs/stripe-cli
|
<https://stripe.com/docs/stripe-cli>
|
||||||
|
|
||||||
2. Login to the casino stripe account
|
2. Login to the casino stripe account
|
||||||
|
|
||||||
```
|
```
|
||||||
stripe login --api-key <casino-stripe-secret-key>
|
stripe login --api-key <casino-stripe-secret-key>
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Start webhook forwarding
|
3. Start webhook forwarding
|
||||||
|
|
||||||
```
|
```
|
||||||
stripe listen --forward-to localhost:8080/webhook
|
stripe listen --forward-to localhost:8080/webhook
|
||||||
```
|
```
|
||||||
|
@ -114,6 +131,7 @@ stripe listen --forward-to localhost:8080/webhook
|
||||||
### Postgres Management
|
### Postgres Management
|
||||||
|
|
||||||
#### Database cleanup (if needed)
|
#### Database cleanup (if needed)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd docker
|
cd docker
|
||||||
docker-compose down
|
docker-compose down
|
||||||
|
@ -122,6 +140,7 @@ docker-compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Setting up IntelliJ Database View
|
#### Setting up IntelliJ Database View
|
||||||
|
|
||||||
1. Run the Docker container with PostgreSQL database
|
1. Run the Docker container with PostgreSQL database
|
||||||
2. Open `application.properties` in the resources folder and copy the database URL
|
2. Open `application.properties` in the resources folder and copy the database URL
|
||||||
3. Open the Database tab in IntelliJ
|
3. Open the Database tab in IntelliJ
|
||||||
|
@ -148,6 +167,7 @@ We follow semantic commit messages to maintain clear project history.
|
||||||
Format: `<type>(<scope>): <subject>`
|
Format: `<type>(<scope>): <subject>`
|
||||||
|
|
||||||
Where `<type>` is one of:
|
Where `<type>` is one of:
|
||||||
|
|
||||||
- `feat`: New feature
|
- `feat`: New feature
|
||||||
- `fix`: Bug fix
|
- `fix`: Bug fix
|
||||||
- `docs`: Documentation changes
|
- `docs`: Documentation changes
|
||||||
|
@ -157,6 +177,7 @@ Where `<type>` is one of:
|
||||||
- `chore`: Updating build tasks, etc; no production code change
|
- `chore`: Updating build tasks, etc; no production code change
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
```
|
```
|
||||||
feat: add user balance display
|
feat: add user balance display
|
||||||
fix(auth): resolve token expiration issue
|
fix(auth): resolve token expiration issue
|
||||||
|
@ -164,6 +185,7 @@ docs: update API documentation
|
||||||
```
|
```
|
||||||
|
|
||||||
References:
|
References:
|
||||||
|
|
||||||
- [Conventional Commits](https://www.conventionalcommits.org/)
|
- [Conventional Commits](https://www.conventionalcommits.org/)
|
||||||
- [Semantic Commit Messages](https://seesparkbox.com/foundry/semantic_commit_messages)
|
- [Semantic Commit Messages](https://seesparkbox.com/foundry/semantic_commit_messages)
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -14,16 +14,16 @@
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "^19.0.0",
|
"@angular/animations": "^20.0.0",
|
||||||
"@angular/cdk": "~19.2.0",
|
"@angular/cdk": "~20.0.0",
|
||||||
"@angular/common": "^19.0.0",
|
"@angular/common": "^20.0.0",
|
||||||
"@angular/compiler": "^19.2.4",
|
"@angular/compiler": "^20.0.0",
|
||||||
"@angular/core": "^19.0.0",
|
"@angular/core": "^20.0.0",
|
||||||
"@angular/forms": "^19.0.0",
|
"@angular/forms": "^20.0.0",
|
||||||
"@angular/platform-browser": "^19.0.0",
|
"@angular/platform-browser": "^20.0.0",
|
||||||
"@angular/platform-browser-dynamic": "^19.0.0",
|
"@angular/platform-browser-dynamic": "^20.0.0",
|
||||||
"@angular/router": "^19.0.0",
|
"@angular/router": "^20.0.0",
|
||||||
"@fortawesome/angular-fontawesome": "^1.0.0",
|
"@fortawesome/angular-fontawesome": "^2.0.0",
|
||||||
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
||||||
"@fortawesome/free-brands-svg-icons": "^6.7.2",
|
"@fortawesome/free-brands-svg-icons": "^6.7.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
||||||
|
@ -39,9 +39,9 @@
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-devkit/build-angular": "^19.0.0",
|
"@angular/compiler-cli": "^20.0.0",
|
||||||
"@angular/cli": "^19.2.5",
|
"@angular-devkit/build-angular": "^20.0.0",
|
||||||
"@angular/compiler-cli": "^19.0.0",
|
"@angular/cli": "^20.0.0",
|
||||||
"@types/jasmine": "~5.1.0",
|
"@types/jasmine": "~5.1.0",
|
||||||
"angular-eslint": "19.7.1",
|
"angular-eslint": "19.7.1",
|
||||||
"eslint": "^9.25.1",
|
"eslint": "^9.25.1",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { ApplicationConfig, provideExperimentalZonelessChangeDetection } from '@angular/core';
|
import { ApplicationConfig, provideZonelessChangeDetection } from '@angular/core';
|
||||||
import { provideRouter } from '@angular/router';
|
import { provideRouter } from '@angular/router';
|
||||||
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ export const appConfig: ApplicationConfig = {
|
||||||
provideRouter(routes),
|
provideRouter(routes),
|
||||||
FontAwesomeModule,
|
FontAwesomeModule,
|
||||||
provideHttpClient(withInterceptors([httpInterceptor])),
|
provideHttpClient(withInterceptors([httpInterceptor])),
|
||||||
provideExperimentalZonelessChangeDetection(),
|
provideZonelessChangeDetection(),
|
||||||
provideAnimationsAsync(),
|
provideAnimationsAsync(),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
Reference in a new issue