Project

Membership Rules Engine

Java and Spring Boot backend project focused on modelling membership business rules through a fictional use case, with emphasis on validation, eligibility, ticket allocation, relational persistence, test quality and technical documentation.

Overview

Java/Spring Boot backend that models business rules for members of a fictional club, including discounts, sales windows, ticket allocation for a final, waiting list, cancellations, persistence, tests, CI and a visual demo.

Stack: Java 21, Spring Boot, Maven, REST API, PostgreSQL, Flyway, Spring Data JPA, JUnit 5, AssertJ, Testcontainers, JaCoCo, GitHub Actions, HTML, CSS, JavaScript, GitHub Pages

What it does

The project is designed to represent real business logic beyond a basic CRUD application by working with conditional rules, access windows, member identity validation, ticket capacity limits and outcome states depending on context. The goal is to provide a backend base that clearly shows how to design and test business decisions with multiple execution paths and functional constraints.

How it is built

The solution is developed with Java 21 and Spring Boot, following a backend structure based on a REST API, service layer, PostgreSQL persistence and schema control with Flyway. It models different member types, store operations and ticket requests, including included access for season ticket holders, sales windows for a regular match and limited allocation for a final. The project uses Spring Data JPA and Maven, adds technical documentation and curl API examples, and is completed with a static visual demo published on GitHub Pages to explain system behaviour without needing to run the application locally.

What it validates or automates

The backend validates every operation through memberNumber and accessCode before applying any rule and resolves different functional states such as CONFIRMED, NOT_YET_AVAILABLE, ALREADY_INCLUDED, WAITING_LIST, NOT_ELIGIBLE, DUPLICATE_REQUEST, CANCELLED or INVALID_MEMBER_ACCESS. Quality is reinforced with unit, parameterised and integration tests using JUnit 5, AssertJ and Testcontainers with real PostgreSQL, plus continuous integration in GitHub Actions and JaCoCo coverage to keep the project reproducible and verifiable.

Key points