Skip to content

Repository files navigation

🎿 SkiMaster


📋 Table of Contents


Overview

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.


Architecture

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

Services

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

Prerequisites

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

Getting Started

1. Clone the repository

git clone <repository-url>
cd skimaster

2. Build all Docker images

./build-all.sh

3. Start the full stack

docker compose up

All services include health checks. The stack is ready when all containers report healthy status (this may take a couple of minutes on first boot).

4. Attach to the CLI

docker attach cli

You can now interact with the system using the built-in shell commands.


Running the Demo

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.sh

Available 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.sh

Project Structure

skimaster/
├── 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

Backend Modules

The backend follows a clean layered architecture organized by domain:

  • customer — Customer registration, catalog, cart management
  • cashier — Payment processing via bank connector
  • order — Order lifecycle management
  • nfc — NFC card registration and lookup
  • monitoring — Gates, panels, dashboards, daily reports, analytics

Testing

The project includes unit tests, integration tests, and BDD tests.

Run all backend tests

cd backend
./mvnw test

Cucumber BDD scenarios

Located in backend/src/test/resources/fr/univcotedazur/skimaster/cucumber/:

  • Customer.feature — Customer registration and cart scenarios
  • Cashier.feature — Payment and checkout scenarios

Run gate/panel tests

cd gate && ./mvnw test
cd panel && ./mvnw test

Contributors

Name GitHub
Driss @MkDriss
Cyril @Musdevl
Fenris @Fenris
Ludo @Ludoctl

License

This project is licensed under the terms of the LICENSE file included in this repository.

About

Microservice-based ski resort management system — NFC cards, gate access control, pass purchasing and daily reporting, orchestrated with Docker Compose.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages