A production-grade reservation booking system with various features, including a scalable backend with NestJS microservices, Kubernetes deployment on Google Cloud, JWT authentication, Stripe payment integration, email notifications, and RabbitMQ message processing. Implemented CI/CD pipelines and production Dockerfiles for each microservice.
For the Restauranteer API (AWS Lambda Function) click here- SOLID Principles: The project follows the SOLID principles, ensuring that the codebase is modular, maintainable, and scalable.
- DRY (Don't Repeat Yourself): The codebase emphasizes the DRY principle by minimizing code duplication. Reusable components and services are employed to avoid redundancy and maintain code consistency.
- Data Validation: Data validation is implemented at multiple levels of the application to ensure data integrity and security. Input validation is performed on the server-side to prevent invalid data from being processed.
- Scalable backend architecture
- Event Driven Architecture
- Creation of a monorepo which houses multiple NestJS applications (Micro-services) within a single repository.
- Creation of a common library for code sharing across multiple applications.
- Implementation of end-to-end (E2E) testing framework with Jest for NestJS microservices.
- Microservices implementation using NestJS
- Integration with Stripe for payment processing
- Email notifications using nodemailer and Gmail
- Data persistence with MongoDB
- Asynchronous message processing with RabbitMQ
- Automated CI/CD pipeline with CloudBuild
- Application running on Google GKE
- Load balancer provision for high availability
- Creation of production-ready Dockerfiles and package.json for each microservice.
Here are the main API endpoints with examples of how to use them:
This resource can be accessed only by authenticated usersRetrieve all of the existing reservations for resturants with assigned users
Retrieve a specific reservation:
Create a new reservation (the userId will be automatically assigned):
Update reservation's information:
Delete a reservation:
Logging into account:
Logging out account:
Sign-Up / Create a new user for the Bookify App:
GET /reservations
GET /reservations/:reservation_id
POST /reservations
Example request body:
{
"startDate": "02-01-2021",
"endDate": "02-01-2023",
"restaurantId": "f24e3777-f167-4920-9652-15fefcd73b23",
"reservationDate": "02-01-2023 Monday 18:00 PM",
"charge": {
"amount": 199,
"card": {
"cvc": "413",
"exp_month": 12,
"exp_year": 2027,
"number": "4242 4242 4242 4242"
}
}
}
PUT /reservations/:reservation_id
Example request body:
{
"startDate": "02-01-2021",
"endDate": "02-01-2023",
"reservationDate": "02-01-2023 Monday 18:00 PM",
}
DELETE /reservations/:reservation_id
By logging in you receive a JWT Token which is signed by the server and an HTTP cookie is returned and can access the rest of the resources.
POST /auth/login
Example request body:
{
"email": "[email protected]",
"password": "Password123!"
}
POST /auth/logout
POST /users
Example request body:
{
"email": "[email protected]",
"password": "Password123!"
}