{"id":28477300,"url":"https://github.com/dance-reservation-system/reservation-system","last_synced_at":"2026-04-30T19:32:22.338Z","repository":{"id":296065608,"uuid":"989303710","full_name":"Dance-reservation-system/Reservation-system","owner":"Dance-reservation-system","description":"🚀 Reservation System","archived":false,"fork":false,"pushed_at":"2025-07-28T22:49:15.000Z","size":747,"stargazers_count":4,"open_issues_count":11,"forks_count":2,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-09-24T17:04:44.500Z","etag":null,"topics":["docker-compose","hibernate","java-21","jwt","open-source","postgres","railway-app","release-automation","spring-boot-3","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dance-reservation-system.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-23T20:54:50.000Z","updated_at":"2025-08-08T08:50:19.000Z","dependencies_parsed_at":"2025-06-15T00:21:22.350Z","dependency_job_id":"1b077f6f-df77-40f4-8854-8090bf006e59","html_url":"https://github.com/Dance-reservation-system/Reservation-system","commit_stats":null,"previous_names":["dance-reservation-system/kamann-modular","dance-reservation-system/reservation-system"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Dance-reservation-system/Reservation-system","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dance-reservation-system%2FReservation-system","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dance-reservation-system%2FReservation-system/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dance-reservation-system%2FReservation-system/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dance-reservation-system%2FReservation-system/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dance-reservation-system","download_url":"https://codeload.github.com/Dance-reservation-system/Reservation-system/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dance-reservation-system%2FReservation-system/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32475192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-compose","hibernate","java-21","jwt","open-source","postgres","railway-app","release-automation","spring-boot-3","spring-security"],"created_at":"2025-06-07T16:11:48.367Z","updated_at":"2026-04-30T19:32:22.319Z","avatar_url":"https://github.com/Dance-reservation-system.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💃 Reservation System - Backend\n\nA modern reservation system **engineered with Domain-Driven Design (DDD) and Clean Architecture** powered by **Java 21** and **Spring Boot 3**, featuring RBAC + ABAC, membership management, class scheduling, and many more.\n\n[![Last Commit](https://img.shields.io/github/last-commit/Dance-reservation-system/Reservation-system?style=flat-square\u0026color=darkgreen\u0026logo=github)](https://github.com/Dance-reservation-system/Reservation-system/commits)\n\n[![Open Issues](https://img.shields.io/github/issues/Dance-reservation-system/Reservation-system?style=flat-square\u0026color=red\u0026logo=github)](https://github.com/Dance-reservation-system/Reservation-system/issues)\n\n[![Open PRs](https://img.shields.io/github/issues-pr/Dance-reservation-system/Reservation-system?style=flat-square\u0026color=teal\u0026logo=github)](https://github.com/Dance-reservation-system/Reservation-system/pulls)\n\n[![BE Contributors](https://img.shields.io/github/contributors/Dance-reservation-system/Reservation-system?style=flat-square\u0026color=darkgreen\u0026label=BE%20Contributors\u0026logo=github)](https://github.com/Dance-reservation-system/Reservation-system/graphs/contributors)\n[![FE Contributors](https://img.shields.io/github/contributors/Dance-reservation-system/reservation-system-web?style=flat-square\u0026color=blue\u0026label=FE%20Contributors\u0026logo=github)](https://github.com/Dance-reservation-system/reservation-system-web/graphs/contributors)\n\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=Dance-reservation-system_Kamann-modular\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=Dance-reservation-system_Kamann-modular)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Dance-reservation-system_Kamann-modular\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Dance-reservation-system_Kamann-modular)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=Dance-reservation-system_Kamann-modular\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=Dance-reservation-system_Kamann-modular)\n\n## ⚙️ Tech Stack\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand full stack\u003c/summary\u003e\n\n### Core\n![Java](https://img.shields.io/badge/Java-21-007396?style=flat-square\u0026logo=openjdk\u0026logoColor=white)\n![Spring Boot](https://img.shields.io/badge/Spring_Boot-3.5.0-6DB33F?style=flat-square\u0026logo=springboot\u0026logoColor=white)\n![Maven](https://img.shields.io/badge/Maven-3.9-C71A36?style=flat-square\u0026logo=apachemaven\u0026logoColor=white)\n\n### Architecture\n![DDD](https://img.shields.io/badge/DDD-Domain--Driven--Design-blueviolet?style=flat-square)\n![Clean Architecture](https://img.shields.io/badge/Architecture-Clean-lightgrey?style=flat-square)\n\n### DB + Migration\n![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-4169E1?style=flat-square\u0026logo=postgresql\u0026logoColor=white)\n![Flyway](https://img.shields.io/badge/Flyway-10.13.0-CC0200?style=flat-square\u0026logo=flyway\u0026logoColor=white)\n\n### Security \u0026 Access\n![Keycloak](https://img.shields.io/badge/Keycloak-IdP_Authz_Identity-0075A8?style=flat-square\u0026logo=keycloak\u0026logoColor=white)\n![OAuth2](https://img.shields.io/badge/OAuth2-Enabled-orange?style=flat-square\u0026logo=oauth)\n![OpenID](https://img.shields.io/badge/OpenID%20Connect-Supported-orange?style=flat-square\u0026logo=openid)\n![JWT](https://img.shields.io/badge/JWT-Authorization-000000?style=flat-square\u0026logo=jsonwebtokens\u0026logoColor=white)\n\n### Docs \u0026 DevOps\n![Swagger](https://img.shields.io/badge/OpenAPI-3.0-6BA539?style=flat-square\u0026logo=swagger\u0026logoColor=black)\n![CI/CD](https://img.shields.io/badge/GitHub_Actions-CI%2FCD-2088FF?style=flat-square\u0026logo=githubactions\u0026logoColor=white)\n![Railway](https://img.shields.io/badge/Deployed%20to-Railway-0B0D0E?style=flat-square\u0026logo=railway\u0026logoColor=white)\n\n\u003c/details\u003e\n\n---\n\n## 🌟 Features by Role\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand detailed feature list per system role\u003c/summary\u003e\n\n---\n\n### 🛡️ Owner\n\n- Create and manage system users (Instructor, Receptionist, Client) using Keycloak ID\n- Assign and modify user roles within domain constraints\n- Configure global studio settings:\n  - Business hours\n  - Cancellation policy\n  - Studio contact information\n- Manage studio halls:\n  - Create and update rooms\n  - Set capacity\n  - Deactivate rooms for maintenance\n- Define membership card types\n- Set rules for entry limits and expiration policies\n- Override or delete class sessions\n- Generate reports on attendance and instructor activity\n\n---\n\n### 🧾 Receptionist\n\n- View today’s full session list with instructors, rooms, and booking stats\n- Check in clients at the front desk (manual attendance logging)\n- Cancel client reservations before session start (according to policy)\n- Verify membership validity at check-in (via membership module)\n- Search for clients and view reservation details\n- Mark sessions as \"in progress\" when the instructor arrives\n- Assist clients with on-site reservation management\n\n---\n\n### 🕺 Instructor\n\n- Create class sessions (title, type, room, capacity, time range)\n- Modify own upcoming sessions (if no clients are registered)\n- Cancel sessions that haven’t started\n- View teaching schedule (past and upcoming)\n- Assign available halls for their own sessions\n\n---\n\n### 💃 Client\n\n- Browse available sessions by date, instructor, or class type\n- Reserve sessions (only with valid membership card)\n- Cancel reservations before cancellation window closes\n- Receive confirmation and alerts for booking and membership status\n- View full history of past and future reservations\n- Track active membership card (expiration, entries left)\n\n\u003c/details\u003e\n\n---\n\n### 📂 Project Structure\n\nThis project follows a **Modular Monolith** architecture based on **DDD Bounded Contexts**.  \nEach module encapsulates a specific business capability and exposes only its application layer.\n\n\n| Module          | Description |\n|------------------|-------------|\n| `useraccess`     | Manages system users, roles, and identity integration via Keycloak |\n| `client`         | Handles client identity, reservation rights, and membership access |\n| `instructor`     | Contains instructor details and teaching-related data |\n| `owner`          | Studio administrator: manages rooms, membership types, and policies |\n| `event`          | Manages class sessions and occurrences (acts as the scheduling domain) |\n| `reservation`    | Encapsulates the reservation lifecycle and constraints |\n| `attendance`     | Tracks client attendance per session occurrence |\n| `membership`     | Issues and manages membership cards with entry limits and expiration |\n| `payment`        | Handles payments for reservations, including lifecycle and events |\n| `reception`      | Records receptionist actions (e.g. manual check-ins, cancellations) |\n\n\n\n## 🚀 Installation\n\n### 1. Clone Repository and Change into the project directory\n  ```bash\n  git clone https://github.com/Dance-reservation-system/Reservation-system.git\n  cd Reservation-system\n  ```\n\n### See detailed environment setup instructions:\nSee [Keycloak Setup Guide](./docs/keycloak/manual-client-secret-setup.md)\n\n### See contribution guidelines:\nSee [Contribution Guide](./docs/contribution-en.md)\n\n### 2. Create the .env file out of .env-example\n```bash\n  mv .env-example .env\n```\n\n### 3. Containers Setup (App + PostgreSQL 16)\nThe containers contains:\n- java application\n- postgresql database\n\nwhich means there is no need to setup anything more\n\n```bash\ndocker compose up -d --build\n```\n\n## 📚 API Documentation\n  Access interactive Swagger UI at:\n  **http://localhost:8080/swagger-ui.html**\n\n####  Registration Endpoint:\n  **POST /api/v1/auth/register-customer** (requires confirm email)\n  \n  **POST /api/v1/auth/register-instructor** (requires admin confirmation)\n  \n  Request Body (using RegisterRequest):\n```json\n{\n  \"email\": \"customer@example.com\",\n  \"password\": \"password\",\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"phone\": 123456789\n}\n```\n  \n####  Authorization: \n  Use JWT token from\n  **POST /api/v1/auth/login**\n  \n  Request Body:\n  ```json\n  {\n  \"email\": \"customer@example.com\",\n  \"password\": \"password\"\n  }\n```\n\n\n### 🚦 CI/CD Pipeline\n  - Integration testing with H2 in-memory database (GithubActions Workflow)\n  - Production deploys via Railway (Dedicated release branch)\n  - Production secrets managed through GitHub Secrets + Railway Secrets\n\n\n### 🖥️ Frontend\n  Client available at:\n**[https://github.com/Dance-reservation-system/reservation-system-web](https://github.com/Dance-reservation-system/reservation-system-web)**\n\n### 📝 Ideas\n\n🎫 Membership expiration reminders\n\n🕒 Schedule conflict detection\n\n📊 PDF report generation\n\n📧 SMTP integration for notifications\n\n📈 Prometheus/Grafana monitoring\n\n🔍 Query performance optimization\n\n### 📜 License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdance-reservation-system%2Freservation-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdance-reservation-system%2Freservation-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdance-reservation-system%2Freservation-system/lists"}