Features • Tech Stack • Getting Started • Project Structure • Contributing
QEats V2 is a simple version of a restaurant discovery platform, built with modern backend technologies and best practices. This project demonstrates a scalable, maintainable architecture with focus on performance, reliability, and clean code principles.
- 🔍 Advanced Search - Find restaurants by restaurant name, restaurant type, cuisine served, cuisine type etc
- 🏪 Restaurant Browsing - Explore restaurants which are nearby and open currently
- 🗺️ Geolocation - Location-based restaurant discovery
- 📊 Multi-threaded Processing - Optimized concurrent request handling
- Language: Java 11+
- Framework: Spring Boot
- Build Tool: Gradle
- Database: MongoDB
- Testing: JUnit, Mockito
- API Testing: Postman
- Spring Data MongoDB for database operations
- Lombok for reducing boilerplate code
- ModelMapper for object transformations
- Log4j for logging
- Java 11 or higher
- Gradle 6.0+
- MongoDB installed and running
- Git
-
Clone the repository
git clone [https://github.com/Anant-Saini/ME_QEATS_V2.git] cd anantsaini-india-ME_QEATS_V2 -
Build the project
gradle clean build
-
Run the application
gradle bootRun
-
Access the API
- Base URL:
http://localhost:8081 - API Documentation: Check Postman collections in the repository
- Base URL:
├── qeatsbackend/ # Main backend module
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ ├── controller/ # REST API endpoints
│ │ │ │ ├── service/ # Business logic
│ │ │ │ ├── repository/ # Data access layer
│ │ │ │ ├── model/ # Entity classes
│ │ │ │ ├── dto/ # Data transfer objects
│ │ │ │ └── util/ # Utility classes
│ │ │ └── resources/
│ │ │ └── application.yml # Configuration
│ │ └── test/ # Unit and integration tests
│ └── build.gradle # Dependencies
├── gradle/
├── .gitignore
└── README.md
Update application.yml with your MongoDB connection details:
spring:
data:
mongodb:
uri: mongodb://localhost:27017/qeatsGET /restaurants?latitude={latitude}&longitude={longitude}- Get nearby restaurantsGET /restaurants?latitude={latitude}&longitude={longitude}&searchFor={searchFor}- Filter nearby restaurants based on search stringGET /restaurants/{id}/menu- Get restaurant menu
Run all tests:
gradle testRun specific test class:
gradle test --tests TestClassNameGenerate coverage report:
gradle test jacocoTestReport- Clean Architecture - Separation of concerns with clear layer boundaries
- Repository Pattern - Abstraction for data access
- Service Layer - Business logic encapsulation
- DTO Pattern - Data transfer between layers
- Multi-threading - Concurrent request processing for improved performance
- Proper Error Handling - Comprehensive exception handling and validation
- Spring Boot application development
- MongoDB operations and queries
- RESTful API design principles
- Unit testing with JUnit and Mockito
- Gradle build automation
- Object-Oriented Design patterns
- Concurrent programming in Java
For more detailed documentation, please refer to:
- API Documentation (Postman collection included)
- Code comments in the codebase
- MongoDB query examples in the repository
Contributions are welcome! Please follow these steps:
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Write clean, readable code
- Follow Java naming conventions
- Add meaningful commit messages
- Write unit tests for new features
- Keep methods small and focused
- Use meaningful variable names
- Document complex logic
For issues or questions:
- Open an issue in the repository
- Check existing documentation
- Review code comments for clarification
This project is part of the Crio.Do curriculum. All rights reserved.
Happy Coding! 🚀