Backend API for TicketHive, an Online Ticket Booking Platform built using Node.js, Express, MongoDB, Firebase Admin SDK, and Stripe.
This server handles authentication, role-based access control, ticket management, bookings, payments, and dashboards for Users, Vendors, and Admins.
The TicketHive Server powers a full-featured travel ticket booking system where:
- Users can book tickets and make secure payments
- Vendors can add, manage, and sell tickets
- Admins can approve tickets, manage users, and control advertisements
The API is protected using Firebase Authentication and supports Stripe Checkout for payments.
- Firebase Authentication (ID Token verification)
- Role-based access control (
user,vendor,admin) - Secure credentials using environment variables
- Stripe payment verification
- Protected routes using middleware
| Role | Permissions |
|---|---|
| User | Book tickets, make payments, view bookings & transactions |
| Vendor | Add tickets, manage bookings, view revenue |
| Admin | Manage users, approve/reject tickets, advertise tickets |
- Node.js
- Express.js
- MongoDB (Atlas)
- Firebase Admin SDK
- Stripe
- dotenv
- CORS
usersticketsbookingstransactions
POST /registerGET /profile(protected)
POST /add-ticket(vendor)GET /my-tickets(vendor)PATCH /my-tickets/:id(vendor)DELETE /my-tickets/:id(vendor)GET /all-ticketsGET /recent-ticketsGET /advertise-ticketsPATCH /manage-tickets/:id(admin)
POST /submit-booking(user)GET /my-booked-tickets(user)GET /requested-bookings(vendor)PATCH /requested-bookings/:id(vendor)
POST /create-checkout-sessionPATCH /payment-statusGET /transactions-history
GET /manage-usersPATCH /manage-users/:idGET /manage-ticketsGET /advertise-tickets-adminPATCH /advertise-tickets/:id
GET /revenue-overview
- User clicks Pay Now
- Stripe Checkout session is created
- User completes payment on Stripe
- Server verifies payment
- Booking status updates to
paid - Ticket quantity decreases
- Transaction saved to database
Create a .env file in the root directory:
PORT=3000
DB_USER=your_mongodb_user
DB_PASS=your_mongodb_password
STRIPE_KEY=your_stripe_secret_key
YOUR_DOMAIN=http://localhost:5173
FIREBASE_SERVICE_KEY=base64_encoded_firebase_service_accountFIREBASE_SERVICE_KEY must be Base64 encoded JSON of your Firebase service account.
- Advertised tickets are limited to 6 at a time
- Fraud vendors have all tickets hidden automatically
- Vendors cannot edit rejected tickets
- Payments are blocked after departure time
This project is developed for educational and assessment purposes.