{"id":30820854,"url":"https://github.com/claudiu28/ticketing-app-java","last_synced_at":"2025-09-06T10:10:58.930Z","repository":{"id":311311556,"uuid":"1043307869","full_name":"claudiu28/Ticketing-App-Java","owner":"claudiu28","description":"Ticketing system for basketball tournaments, built with JavaFX client, gRPC communication, and asynchronous backend using CompletableFuture with SQLite. Implements Observer and Proxy patterns for real-time updates of ticket availability and sales.","archived":false,"fork":false,"pushed_at":"2025-08-23T15:42:03.000Z","size":240,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-24T05:49:48.501Z","etag":null,"topics":["client-server","completable-future","grpc","java","javafx","observer-pattern","proxy-pattern","sqlite3"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/claudiu28.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-08-23T15:24:38.000Z","updated_at":"2025-08-23T15:45:12.000Z","dependencies_parsed_at":"2025-08-24T07:02:10.989Z","dependency_job_id":"3bd6b416-478c-4ef8-8969-81b812e75268","html_url":"https://github.com/claudiu28/Ticketing-App-Java","commit_stats":null,"previous_names":["claudiu28/ticketing-app-java"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/claudiu28/Ticketing-App-Java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiu28%2FTicketing-App-Java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiu28%2FTicketing-App-Java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiu28%2FTicketing-App-Java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiu28%2FTicketing-App-Java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/claudiu28","download_url":"https://codeload.github.com/claudiu28/Ticketing-App-Java/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiu28%2FTicketing-App-Java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273887923,"owners_count":25185777,"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","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["client-server","completable-future","grpc","java","javafx","observer-pattern","proxy-pattern","sqlite3"],"created_at":"2025-09-06T10:03:22.871Z","updated_at":"2025-09-06T10:10:58.902Z","avatar_url":"https://github.com/claudiu28.png","language":"Java","readme":"# 🎟️ Ticketing System\n\nA desktop ticketing system for managing basketball tournament tickets.  \nThe application provides authentication, ticket sales, search, and logout features.\nIt utilizes **JavaFX** for the client, **gRPC** for communication, **CompletableFuture** for asynchronous backend operations, and adheres to the **Observer pattern with Proxy** to broadcast live updates to all connected clients.\n\n---\n\n## ✨ Features\n\n1. **Login**\n   - Cashier authenticates with username \u0026 password (stored as BCrypt hashes).\n   - On success, a window opens showing all matches (Team A vs Team B, Semifinals, Final), ticket price, and available seats.\n\n2. **Ticket Sale**\n   - Sell tickets for a match by entering the customer's name, address, and number of seats.\n   - All other clients immediately see updated availability (Observer pattern).\n   - If no seats remain, the match is marked **SOLD OUT** in red.\n\n3. **Search**\n   - Search tickets purchased by a client using name and/or address.\n   - If multiple clients share the same name, all their tickets are shown.\n   - Results display customer name, address, match, and number of seats.\n\n4. **Logout**\n   - Ends the session and disconnects the user from the system.\n\n---\n\n## 🧰 Tech Stack\n\n- Java 17+\n- JavaFX (desktop UI)\n- gRPC + Protocol Buffers\n- SQLite + JDBC\n- BCrypt (password hashing)\n- CompletableFuture (async backend)\n- Observer \u0026 Proxy design patterns\n- \n---\n\n## 🔐 Security Notes\n\nPasswords are never stored in plain text (only BCrypt hashes).\n\nPassword hashes are not returned in gRPC responses.\n\nSessions tracked to prevent duplicate logins.\n\n---\n\n## 🖼️ Screenshots\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"SS/SS1.png\" width=\"100%\"/\u003e\u003cbr/\u003e\n      \u003csub\u003e\u003cb\u003eLogin\u003c/b\u003e\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"SS/SS2.png\" width=\"100%\"/\u003e\u003cbr/\u003e\n      \u003csub\u003e\u003cb\u003eMatches List\u003c/b\u003e\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"SS/SS3.png\" width=\"100%\"/\u003e\u003cbr/\u003e\n      \u003csub\u003e\u003cb\u003eSearch\u003c/b\u003e\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"SS/SS4.png\" width=\"100%\"/\u003e\u003cbr/\u003e\n      \u003csub\u003e\u003cb\u003eTicket Sale\u003c/b\u003e\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaudiu28%2Fticketing-app-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclaudiu28%2Fticketing-app-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaudiu28%2Fticketing-app-java/lists"}