A progressive Node.js framework for building efficient and scalable server-side applications.
A comprehensive backend system for a movie reservation service built with NestJS, PostgreSQL, and Docker.
-
User Authentication and Authorization
- JWT-based authentication
- Role-based access control (Admin and User roles)
- Secure password hashing
-
Movie Management
- CRUD operations for movies
- Movie categorization by genre
- Movie poster image upload
-
Theater and Showtime Management
- Theater configuration with seat layouts
- Scheduling of movie showtimes
- Seat category pricing
-
Reservation System
- Real-time seat availability checking
- Seat reservation with conflict prevention
- Reservation management (view, cancel)
-
Reporting
- Revenue reports by movie, time period
- Theater occupancy reports
- Popular movies ranking
-
Additional Features
- Rate limiting
- Health checks
- Comprehensive logging
- Caching for performance
- API versioning
- File uploads
- Event-based notifications
- Scheduled tasks
- Exception handling
- Configuration validation
- API documentation with Swagger
- Comprehensive testing
- Backend Framework: NestJS
- Database: PostgreSQL
- Containerization: Docker & Docker Compose
- Authentication: JWT, Passport
- Validation: class-validator, Joi
- Documentation: Swagger/OpenAPI
- Logging: Winston
- Testing: Jest, SuperTest
- Docker and Docker Compose
- Node.js (for local development)
-
Clone the repository:
git clone https://github.com/DAMMAK/movie-mate.git cd movie-mate
-
Create a
.env
file in the root directory with the following content:
PORT=3000
NODE_ENV=development
JWT_SECRET= //Include JWT_SECRET Of your choice or use this https://jwtsecret.com/generate to generate JWT_SECRET
JWT_EXPIRATION=1d
DB_HOST=postgres
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=password
DB_DATABASE=movie_reservation
API_URL=http://localhost:3000
- Start the application using Docker Compose:
docker-compose up -d
- The API will be available at: http://localhost:3000 The API documentation will be available at: http://localhost: