- Overview
- Architecture
- Services
- Prerequisites
- Getting Started
- Running the Demo
- Project Structure
- Testing
- Contributors
- License
SkiMaster is a distributed application that simulates the operations of a ski resort. It handles customer registration, NFC card management, ski pass purchasing, gate access control, panel monitoring, and daily reporting — all orchestrated through Docker Compose.
The project was developed as part of the ISA course and demonstrates key software engineering concepts including: layered architecture, REST APIs, AOP logging, persistence with JPA/PostgreSQL, Cucumber BDD testing, and containerized deployments.
The system is composed of several independent microservices communicating over HTTP:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ CLI │────▶│ Backend │────▶│ PostgreSQL │
└─────────────┘ │ (Spring) │ │ DB │
└──────┬──────┘ └─────────────┘
│
┌────────────┼────────────┐
│ │ │
┌──────▼───┐ ┌─────▼────┐ ┌───▼──────┐
│ Gate x4 │ │ Panel │ │ Bank │
│(Spring) │ │(Spring) │ │ (NestJS)│
└──────────┘ └──────────┘ └──────────┘
Gate CLI x4
- Backend — Core business logic: customers, orders, NFC cards, payments, monitoring
- Bank — External payment simulator (NestJS)
- Gate (x4) — Physical ski lift gate simulators, each with its own CLI
- Panel — Information display panel connected to gates and backend
- CLI — Interactive shell to drive the backend
- PostgreSQL — Shared relational database
| Service | Technology | Port | Description |
|---|---|---|---|
backend |
Spring Boot (Java) | 8080 |
Core application server |
bank-system |
NestJS (TypeScript) | 9090 |
Payment processing simulator |
postgres |
PostgreSQL 18 | — | Shared database |
cli |
Spring Shell (Java) | — | Interactive CLI for the backend |
gate1–4 |
Spring Boot (Java) | 8090–8093 |
Ski lift gate simulators |
gate-cli-1–4 |
Spring Shell (Java) | — | CLIs for each gate |
panel1 |
Spring Boot (Java) | 8050 |
Information panel service |
Make sure the following are installed on your machine:
- Docker ≥ 24
- Docker Compose ≥ 2.x
- (Optional) Java 21+ and Maven if you want to run services locally
git clone <repository-url>
cd skimaster./build-all.shdocker compose upAll services include health checks. The stack is ready when all containers report healthy status (this may take a couple of minutes on first boot).
docker attach cliYou can now interact with the system using the built-in shell commands.
A set of scripted demo scenarios is available to showcase the full system workflow:
docker attach cli
# Inside the CLI container:
cd demo
./all-scenarios.shAvailable demo scenarios:
| Script | Description |
|---|---|
1-setup.sh |
Initial data setup (domains, gates, plans) |
2-scan-card.sh |
NFC card scan simulation |
3-buy-card.sh |
Purchase a ski pass |
4-supercard-billing.sh |
Supercard automatic billing |
5-gateman-report.sh |
Gateman daily report |
6-gate-treshold.sh |
Alert threshold triggering |
7-daily-report.sh |
Full daily report generation |
A gate stress test is also available:
docker attach gate-cli-1
cd demo
./gate-stresser.shskimaster/
├── backend/ # Core Spring Boot server (customers, orders, monitoring, NFC, cashier)
├── bank/ # NestJS payment simulator
├── cli/ # Spring Shell interactive CLI
├── gate/ # Gate service (NFC scan, threshold alerts)
├── gate-cli/ # CLI for gate interaction
├── panel/ # Panel service (status display, messages)
├── chapters/ # Course documentation (architecture, testing, persistence...)
├── doc/ # Diagrams and slides
├── compose.yaml # Full Docker Compose stack
└── build-all.sh # Build script for all images
The backend follows a clean layered architecture organized by domain:
customer— Customer registration, catalog, cart managementcashier— Payment processing via bank connectororder— Order lifecycle managementnfc— NFC card registration and lookupmonitoring— Gates, panels, dashboards, daily reports, analytics
The project includes unit tests, integration tests, and BDD tests.
cd backend
./mvnw testLocated in backend/src/test/resources/fr/univcotedazur/skimaster/cucumber/:
Customer.feature— Customer registration and cart scenariosCashier.feature— Payment and checkout scenarios
cd gate && ./mvnw test
cd panel && ./mvnw test| Name | GitHub |
|---|---|
| Driss | @MkDriss |
| Cyril | @Musdevl |
| Fenris | @Fenris |
| Ludo | @Ludoctl |
This project is licensed under the terms of the LICENSE file included in this repository.