{"id":27979499,"url":"https://github.com/lakshay1341/cineticket","last_synced_at":"2026-05-05T22:43:04.498Z","repository":{"id":281470157,"uuid":"937236637","full_name":"lakshay1341/CineTicket","owner":"lakshay1341","description":"CineTicket is an enterprise-grade Spring Boot application that provides a comprehensive solution for movie enthusiasts. It seamlessly integrates movie reviews with theater seat reservations, offering a complete platform for users to discover movies, share opinions, and book seats for upcoming shows.","archived":false,"fork":false,"pushed_at":"2025-05-02T09:32:13.000Z","size":10183,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-08T02:53:43.913Z","etag":null,"topics":["api-development","authentication","backend","bcrypt","itextpdf","java","jwt-authentication","movie-review","movie-ticket-booking-system","mysql","postman-collection","rest-api","s3-bucket","spring-boot","spring-data-jpa","spring-security","stripe-payments","swagger"],"latest_commit_sha":null,"homepage":"https://cineticket.onrender.com/","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/lakshay1341.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}},"created_at":"2025-02-22T16:55:50.000Z","updated_at":"2025-05-05T15:52:22.000Z","dependencies_parsed_at":"2025-03-29T07:24:28.137Z","dependency_job_id":"8a95aec1-e6b2-48fb-ad46-4d6c9bcab47f","html_url":"https://github.com/lakshay1341/CineTicket","commit_stats":null,"previous_names":["lakshay1341/movie-review-system-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lakshay1341%2FCineTicket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lakshay1341%2FCineTicket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lakshay1341%2FCineTicket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lakshay1341%2FCineTicket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lakshay1341","download_url":"https://codeload.github.com/lakshay1341/CineTicket/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252989958,"owners_count":21836667,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["api-development","authentication","backend","bcrypt","itextpdf","java","jwt-authentication","movie-review","movie-ticket-booking-system","mysql","postman-collection","rest-api","s3-bucket","spring-boot","spring-data-jpa","spring-security","stripe-payments","swagger"],"created_at":"2025-05-08T02:53:48.914Z","updated_at":"2026-05-05T22:43:04.461Z","avatar_url":"https://github.com/lakshay1341.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🎬 CineTicket - Movie Review \u0026 Reservation System\n\n[![Java](https://img.shields.io/badge/Java-17-4a4e69?style=for-the-badge\u0026logo=openjdk\u0026logoColor=white)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)\n[![Spring Boot](https://img.shields.io/badge/Spring_Boot-3.2.3-4a4e69?style=for-the-badge\u0026logo=spring\u0026logoColor=white)](https://spring.io/projects/spring-boot)\n[![MySQL](https://img.shields.io/badge/MySQL-8.0-4a4e69?style=for-the-badge\u0026logo=mysql\u0026logoColor=white)](https://www.mysql.com/)\n[![JWT](https://img.shields.io/badge/JWT-0.12.6-4a4e69?style=for-the-badge\u0026logo=jsonwebtokens\u0026logoColor=white)](https://github.com/jwtk/jjwt)\n[![Stripe](https://img.shields.io/badge/Stripe-22.0.0-4a4e69?style=for-the-badge\u0026logo=stripe\u0026logoColor=white)](https://stripe.com/)\n[![License](https://img.shields.io/badge/License-MIT-4a4e69?style=for-the-badge\u0026logo=opensourceinitiative\u0026logoColor=white)](LICENSE)\n\n**A modern, secure, and scalable RESTful API for movie reviews and theater seat reservations**\n\n🌐 **[Live Demo: https://cineticket.onrender.com](https://cineticket.onrender.com)**\n\n[Overview](#-overview) •\n[Features](#-key-features) •\n[Demo](#️-frontend-demo) •\n[Architecture](#-architecture) •\n[Installation](#-installation) •\n[API Reference](#-api-reference) •\n[Security](#-security) •\n[Documentation](#-documentation) •\n[Contributing](#-contributing) •\n[Contact](#-contact)\n\n\u003c/div\u003e\n\n## 📋 Overview\n\n**CineTicket** is an enterprise-grade Spring Boot application that provides a comprehensive solution for movie enthusiasts. It seamlessly integrates movie reviews with theater seat reservations, offering a complete platform for users to discover movies, share opinions, and book seats for upcoming shows.\n\nBuilt with modern Java and Spring technologies, this API implements industry best practices including JWT authentication, role-based access control, Stripe payment integration, PDF receipt generation, email notifications, rate limiting, and comprehensive API documentation.\n\nThe system is deployed and fully functional at [https://cineticket.onrender.com](https://cineticket.onrender.com).\n\n## 🖥️ Frontend Demo\n\n| ![Admin Dashboard](docs/gifs/admin.gif) | ![User Experience](docs/gifs/user.gif) |\n|:---:|:---:|\n| **👨‍💼 Admin Dashboard** | **🧑‍💻 User Experience** |\n| *Manage movies, theaters, showtimes, and view reservation data* | *Browse movies, read reviews, select seats, and complete the reservation process* |\n\n## ✨ Key Features\n\n| 🎬 **Movie Platform** | 🎟️ **Reservation System** | 🔒 **Enterprise Security** |\n|:---|:---|:---|\n| • Browse \u0026 search movies\u003cbr\u003e• Rate \u0026 review movies\u003cbr\u003e• Manage user reviews\u003cbr\u003e• Movie recommendations | • Theater management\u003cbr\u003e• Showtime scheduling\u003cbr\u003e• Seat selection \u0026 booking\u003cbr\u003e• Stripe payment integration\u003cbr\u003e• PDF receipt generation\u003cbr\u003e• Email notifications | • JWT authentication\u003cbr\u003e• Role-based access control\u003cbr\u003e• Rate limiting protection\u003cbr\u003e• Secure transactions |\n### 🌟 Advanced Features\n\n| 💳 **Payment Processing** | 📧 **Email Notifications** | 🎫 **Reservation Management** |\n|:---|:---|:---|\n| • Stripe integration\u003cbr\u003e• Checkout sessions\u003cbr\u003e• Webhook handling\u003cbr\u003e• Receipt generation | • Confirmation emails\u003cbr\u003e• PDF attachments\u003cbr\u003e• Branded templates | • Interactive seat selection\u003cbr\u003e• Status tracking\u003cbr\u003e• Concurrent booking protection |\n\n## 🏗️ Architecture\n\n### Technology Stack\n\n- **Backend**: Java 17, Spring Boot 3.2.3, Spring Data JPA\n- **Database**: MySQL 8.0\n- **Security**: Spring Security, JJWT 0.12.6\n- **API Documentation**: Swagger OpenAPI 3.0\n- **Payment Processing**: Stripe API 22.0.0\n- **PDF Generation**: iText 5.5.13.3\n- **Email Service**: Spring Mail\n- **Utilities**: Lombok, Resilience4j, MessageSource\n- **Testing**: JUnit 5, Mockito\n\n## 🔍 Installation\n\n### Prerequisites\n\n- Java 17 or higher\n- Maven 3.6+\n- MySQL 8.0+\n\n### Quick Start Guide\n\n1. **Clone the repository**\n\n```bash\ngit clone https://github.com/lakshay1341/Movie-Review-System-API.git\ncd Movie-Review-System-API\n```\n\n2. **Configure the database**\n\n```sql\nCREATE DATABASE moviereviewdbupdated;\n```\n\n3. **Configure application properties**\n\nUpdate `src/main/resources/application.properties` with your database credentials, JWT configuration, and Stripe API keys.\n\n\u003e **⚠️ Security Note**: Generate a secure JWT secret using `openssl rand -base64 64` and never commit it to version control.\n\n4. **Set up environment variables**\n\nCreate a `.env` file based on the provided `.env.example` with your configuration.\n\n```bash\n# Copy the example file\ncp .env.example .env\n\n# Edit the .env file with your actual values\n# For security, generate a new JWT secret:\nopenssl rand -base64 64\n```\n\n5. **Build and run the application**\n\n```bash\nmvn clean install\nmvn spring-boot:run\n```\n\n6. **Access the application**\n\n- API: [http://localhost:8080](http://localhost:8080)\n- Swagger UI: [http://localhost:8080/swagger-ui/index.html](http://localhost:8080/swagger-ui/index.html)\n\n### Default Credentials\n\nThe system automatically creates two users on startup:\n\n| Role  | Username | Password |\n|-------|----------|----------|\n| Admin | `admin`  | `password` |\n| User  | `user`   | `password` |\n\n## 🔥 API Reference\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://me3333-6732.postman.co/workspace/4f28700f-ee89-485e-a928-767cd44234f9\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Postman-View%20Complete%20Collection-4a4e69?style=for-the-badge\u0026logo=postman\u0026logoColor=white\" alt=\"View Complete Collection\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n### API Categories\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-authentication\"\u003e\u003cimg src=\"https://img.shields.io/badge/🔑_Authentication-2_Endpoints-4a4e69?style=flat-square\" alt=\"Authentication: 2 Endpoints\"\u003e\u003c/a\u003e\n  \u003ca href=\"#-movies\"\u003e\u003cimg src=\"https://img.shields.io/badge/🎬_Movies-6_Endpoints-4a4e69?style=flat-square\" alt=\"Movies: 6 Endpoints\"\u003e\u003c/a\u003e\n  \u003ca href=\"#-reviews\"\u003e\u003cimg src=\"https://img.shields.io/badge/⭐_Reviews-4_Endpoints-4a4e69?style=flat-square\" alt=\"Reviews: 4 Endpoints\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-theaters\"\u003e\u003cimg src=\"https://img.shields.io/badge/🏛️_Theaters-6_Endpoints-4a4e69?style=flat-square\" alt=\"Theaters: 6 Endpoints\"\u003e\u003c/a\u003e\n  \u003ca href=\"#-showtimes\"\u003e\u003cimg src=\"https://img.shields.io/badge/📅_Showtimes-7_Endpoints-4a4e69?style=flat-square\" alt=\"Showtimes: 7 Endpoints\"\u003e\u003c/a\u003e\n  \u003ca href=\"#-seats\"\u003e\u003cimg src=\"https://img.shields.io/badge/💺_Seats-2_Endpoints-4a4e69?style=flat-square\" alt=\"Seats: 2 Endpoints\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-reservations\"\u003e\u003cimg src=\"https://img.shields.io/badge/🎟️_Reservations-6_Endpoints-4a4e69?style=flat-square\" alt=\"Reservations: 6 Endpoints\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### 🔑 Authentication\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eEndpoint\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eAccess\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePOST\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/auth/register\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eRegister new user\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePOST\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/auth/login\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet JWT token\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### 🎬 Movies\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eEndpoint\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eAccess\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/movies\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet all movies\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/movies?search={query}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eSearch movies\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/movies/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet movie by ID\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePOST\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/movies\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eAdd movie\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePUT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/movies/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eUpdate movie\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eDELETE\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/movies/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eDelete movie\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### ⭐ Reviews\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eEndpoint\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eAccess\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePOST\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reviews/movies/{movieId}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eAdd review\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/User-5a6268?style=flat-square\" alt=\"User\"\u003e \u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reviews/my-reviews\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet user reviews\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/User-5a6268?style=flat-square\" alt=\"User\"\u003e \u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePUT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reviews/{reviewId}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eUpdate review\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Owner-495057?style=flat-square\" alt=\"Owner\"\u003e \u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eDELETE\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reviews/{reviewId}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eDelete review\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Owner-495057?style=flat-square\" alt=\"Owner\"\u003e \u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### 🏛️ Theaters\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eEndpoint\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eAccess\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/theaters\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet all theaters\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/theaters/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet theater by ID\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/theaters/search?location={location}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eSearch theaters\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePOST\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/theaters\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eAdd theater\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePUT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/theaters/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eUpdate theater\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eDELETE\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/theaters/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eDelete theater\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### 📅 Showtimes\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eEndpoint\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eAccess\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/showtimes?date={date}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet showtimes by date\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/showtimes/movies/{movieId}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet showtimes by movie\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/showtimes/theaters/{theaterId}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet showtimes by theater\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/showtimes/available\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet available showtimes\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePOST\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/showtimes\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eAdd showtime\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePUT\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/showtimes/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eUpdate showtime\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eDELETE\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/showtimes/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eDelete showtime\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### 💺 Seats\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eEndpoint\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eAccess\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/seats/showtimes/{showtimeId}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet all seats\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Public-6c757d?style=flat-square\" alt=\"Public\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/seats/showtimes/{showtimeId}/available\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet available seats\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Authenticated-4a4e69?style=flat-square\" alt=\"Authenticated\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### 🎟️ Reservations\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eEndpoint\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eAccess\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003ePOST\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reservations\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eCreate reservation\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Authenticated-4a4e69?style=flat-square\" alt=\"Authenticated\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reservations/my-reservations\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet user reservations\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Authenticated-4a4e69?style=flat-square\" alt=\"Authenticated\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reservations/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet reservation by ID\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Owner-495057?style=flat-square\" alt=\"Owner\"\u003e \u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eDELETE\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reservations/{id}\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eCancel reservation\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Owner-495057?style=flat-square\" alt=\"Owner\"\u003e \u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reservations\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet all reservations\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003ccode\u003eGET\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003e/api/v1/reservations/reports/revenue\u003c/code\u003e\u003c/td\u003e\n      \u003ctd\u003eGet revenue report\u003c/td\u003e\n      \u003ctd\u003e\u003cimg src=\"https://img.shields.io/badge/Admin-343a40?style=flat-square\" alt=\"Admin\"\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## 🔒 Security\n\n| **Security Features** | **Authentication Flow** |\n|:---|:---|\n| • **JWT Authentication**: Secure token-based authentication\u003cbr\u003e• **Password Encryption**: BCrypt encoding (strength 12)\u003cbr\u003e• **Role-Based Access Control**: User/admin permissions\u003cbr\u003e• **Rate Limiting**: 100 requests per minute\u003cbr\u003e• **Concurrent Access Control**: Pessimistic locking\u003cbr\u003e• **Transactional Operations**: Data integrity\u003cbr\u003e• **Secure Payments**: Stripe integration\u003cbr\u003e• **Environment Variables**: Secure credential management | 1. User registers or logs in with credentials\u003cbr\u003e2. Server validates credentials and returns a JWT token\u003cbr\u003e3. Client includes JWT in Authorization header\u003cbr\u003e4. Server validates token and grants access based on roles\u003cbr\u003e\u003cbr\u003e**Example Header:**\u003cbr\u003e`Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...` |\n\n## 📖 Documentation\n\n### API Documentation\n\n| **Swagger UI** | **Postman Collection** |\n|:---|:---|\n| Interactive API documentation with request/response examples\u003cbr\u003e\u003cbr\u003e• [Local Development](http://localhost:8080/swagger-ui/index.html)\u003cbr\u003e• [Production](https://cineticket.onrender.com/swagger-ui/index.html)\u003cbr\u003e• [OpenAPI Specification](https://cineticket.onrender.com/api-docs) | Complete API testing suite with environments\u003cbr\u003e\u003cbr\u003e[![Run in Postman](https://img.shields.io/badge/Postman-Run%20in%20Postman-4a4e69?style=for-the-badge\u0026logo=postman\u0026logoColor=white)](https://me3333-6732.postman.co/workspace/4f28700f-ee89-485e-a928-767cd44234f9)\u003cbr\u003e\u003cbr\u003e*Also available in `docs/postman` directory* |\n\n### Response Format\n\nAll API responses follow a consistent format:\n\n```json\n{\n  \"success\": true,\n  \"message\": \"operation.success.message\",\n  \"data\": {\"Response data here\"}\n}\n```\n\n### Postman Collection Features\n\n- **Complete API Coverage**: All endpoints from authentication to reservations\n- **Environment Variables**: Pre-configured for development and testing\n- **Authentication Handling**: Automatic JWT token management\n- **Test Scripts**: Response validation and environment variable extraction\n- **Request Examples**: Sample payloads for all operations\n\n## 💻 Contributing\n\nContributions are welcome! Here's how you can contribute:\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Commit your changes: `git commit -m 'Add some amazing feature'`\n4. Push to the branch: `git push origin feature/amazing-feature`\n5. Open a Pull Request\n\n\n## 🔗 Related Links\n\n- 🎬 **Original Problem Statement**: [roadmap.sh](https://roadmap.sh/projects/movie-reservation-system/solutions?u=658efb1fae22c12523f4de17)\n- 🌐 **Live Demo**: [https://cineticket.onrender.com](https://cineticket.onrender.com)\n- 📚 **API Documentation**: [https://cineticket.onrender.com/swagger-ui/index.html](https://cineticket.onrender.com/swagger-ui/index.html)\n\n\n## 👨‍💻 Contact\n\n**Lakshay Chaudhary**\n📧 Email: [lakshaychaudhary2003@gmail.com](mailto:lakshaychaudhary2003@gmail.com)\n💼 GitHub: [lakshay1341](https://github.com/lakshay1341)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e⭐ Star this repository if you find it helpful!\u003c/p\u003e\n  \u003cp\u003e\n    \u003csub\u003eBuilt with ❤️ by Lakshay Chaudhary\u003c/sub\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flakshay1341%2Fcineticket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flakshay1341%2Fcineticket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flakshay1341%2Fcineticket/lists"}