Skip to content

Musdevl/skimaster

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

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors