Prerequisites
- Java JDK 21 or later
- Maven 3.6+
- A supported database: MySQL 8.0+, PostgreSQL, SQLite (no setup needed for development), or H2
- An IDE with JavaFX support (IntelliJ IDEA, Eclipse, or VS Code) — optional for running via Maven
Installation and running locally
Configure environment variables
Copy the example environment file and fill in your credentials:Key variables:
SQLite is the easiest way to get started locally — no database server required. The database file is created automatically at
./data/rakcha.db on first launch.Building a distributable
The Maven build produces native installers viajpackage for each platform:
target/:
| Platform | Format |
|---|---|
| Windows | .msi installer |
| macOS | .pkg installer |
| Linux | .deb package + portable archive |
build-and-deploy.yml GitHub Actions workflow when a release tag is pushed.
Running tests
Key functional areas
Controllers live undersrc/main/java/com/esprit/controllers/ and are organized by domain:
| Module | Controllers | Description |
|---|---|---|
cinemas/ | 11 controllers | Cinema venues, halls, seating, and movie session scheduling |
films/ | 8 controllers | Film catalog, actor management, ticket booking, IMDB import, trailers |
series/ | 9 controllers | TV series catalog, seasons, episodes, favorites, and watch progress |
products/ | 12 controllers | Product catalog, shopping cart, checkout, order tracking, QR codes |
users/ | 21 controllers | Role-based access (Client, Admin, Cinema Manager), profiles, messaging, achievements |
SidebarController.java— navigation sidebarSplashScreenController.java— startup screenUniversalSearchBox.java— role-aware search with Caffeine caching
Docker deployment
Adocker-compose.yml and Dockerfile are included in apps/desktop.
- Development
- Production
Starts the application with the Adminer database UI on port 8081:
| Service | Port | Description |
|---|---|---|
rakcha-app | 8080 | Main application |
rakcha-db | 3306 | MySQL database |
rakcha-redis | 6379 | Redis cache |
adminer | 8081 | Database admin UI (dev profile only) |
Multi-database support
TheDataSource.java utility supports four databases via HikariCP connection pooling. Switch by updating DB_URL in your .env file:
- SQLite (development)
- MySQL
- PostgreSQL
- H2
No server required. The database file is created on first run.
Technology stack
| Layer | Technology |
|---|---|
| Language | Java 21 |
| UI framework | JavaFX 21.0.7 |
| Build tool | Maven 3.6+ |
| UI extensions | ControlsFX 11.2.2, JFoenix 9.0.10 |
| Icons | Ikonli 12.4.0 (Material Design 2) |
| Animations | AnimateFX 1.3.0 |
| Databases | MySQL 9.3, PostgreSQL 42.7, SQLite 3.50, H2 |
| Connection pool | HikariCP 5.1.0 |
| Auth (OAuth) | ScribeJava 8.3.3 (Google, Microsoft) |
| Biometric auth | OpenCV 4.9+ (face recognition) |
| Payments | Stripe Java 29.4.0, PayPal REST SDK 1.14.0 |
| Search / cache | Apache Lucene 9.12.1, Caffeine 3.1.8 |
| iText 5.5.13.4, PDFBox 3.0.5 | |
| QR / barcodes | ZXing 3.5.3 |
| SMS | Twilio 11.0.0, Vonage 9.3.1 |
| Testing | JUnit Jupiter, TestFX 4.0.18, AssertJ 3.27.3 |