How shanmukht9/quickserve-fe works
Purpose and Entry Points
QuickServe is a Spring Boot backend for a service-ordering workflow: user authentication, catalog/homepage and menu discovery, cart validation, order placement/partner acceptance, and payment processing. Application bootstrap: src/main/java/com/quickserve/QuickServeApplication.java. HTTP entry points are controllers under src/main/java/com/quickserve/presentation/, notably OrderController.java, PaymentController.java, and AuthController.java.
Layered / Ports-and-Adapters Design
The core is structured as presentation → application use cases → domain ports → infrastructure adapters. Domain entities and persistence-independent interfaces define the business boundary in src/main/java/com/quickserve/domain/entity/Order.java, src/main/java/com/quickserve/domain/port/OrderRepositoryPort.java, and src/main/java/com/quickserve/domain/port/CatalogRepositoryPort.java. Implementations bind those ports to JPA, Redis, Firebase, and payment systems.
Identity and Request Security
OTP-based onboarding/authentication and JWT refresh are application workflows: src/main/java/com/quickserve/application/usecase/RequestOtpUseCaseImpl.java, src/main/java/com/quickserve/application/usecase/VerifyOtpUseCaseImpl.java, and src/main/java/com/quickserve/application/usecase/RefreshTokenUseCaseImpl.java. Requests traverse JWT security filtering and security configuration before protected controllers: src/main/java/com/quickserve/infrastructure/security/JwtAuthenticationFilter.java and src/main/java/com/quickserve/infrastructure/security/SecurityConfig.java.
Catalog, Homepage, and Cache
Homepage and menu use cases assemble banners, sections, category trees, and offerings through catalog ports: src/main/java/com/quickserve/application/usecase/GetHomepageUseCaseImpl.java, src/main/java/com/quickserve/application/usecase/GetMenuUseCaseImpl.java, and src/main/java/com/quickserve/domain/entity/HomepageSkeleton.java. Redis-backed homepage/offering caches provide a read-performance boundary in src/main/java/com/quickserve/infrastructure/cache/RedisHomepageCacheAdapter.java and src/main/java/com/quickserve/infrastructure/cache/RedisOfferingCacheAdapter.java. Domain update events drive invalidation/rebuild behavior via src/main/java/com/quickserve/infrastructure/invalidation/CacheInvalidationListener.java and src/main/java/com/quickserve/infrastructure/async/OfferingRebuildService.java.
Order and Partner Dispatch Flow
Cart validation precedes placement, producing validated items and summaries before an order is persisted: src/main/java/com/quickserve/application/usecase/ValidateCartUseCaseImpl.java, src/main/java/com/quickserve/application/usecase/PlaceOrderUseCaseImpl.java, and src/main/java/com/quickserve/domain/entity/CartSummary.java. Partner selection and acceptance are separate state transitions represented by src/main/java/com/quickserve/application/usecase/SelectPartnerUseCaseImpl.java, src/main/java/com/quickserve/application/usecase/OrderAcceptUseCaseImpl.java, and src/main/java/com/quickserve/domain/entity/PartnerDispatchEvent.java. Firebase is the outbound dispatch/notification integration boundary through src/main/java/com/quickserve/domain/port/FirebaseDispatchPort.java and src/main/java/com/quickserve/infrastructure/persistence/adapter/FirebaseAdapter.java.
Payments and Webhooks
Payment-option retrieval, order/payment handling, and Razorpay webhook processing are isolated use cases: src/main/java/com/quickserve/application/usecase/GetPaymentOptionsUseCaseImpl.java, src/main/java/com/quickserve/application/usecase/HandleRazorpayWebhookUseCaseImpl.java, and src/main/java/com/quickserve/infrastructure/payment/RazorpayService.java. External Razorpay callbacks enter through src/main/java/com/quickserve/presentation/PaymentWebhookController.java; resulting payment state is persisted through src/main/java/com/quickserve/domain/port/PaymentRepositoryPort.java.
Persistence, Runtime, and Operations
The service uses Spring Boot/JPA with database schema migration at src/main/resources/db/migration.sql; repository adapters map domain models to JPA entities, including src/main/java/com/quickserve/infrastructure/persistence/adapter/OrderPersistenceAdapter.java and src/main/java/com/quickserve/infrastructure/persistence/entity/OrderJpaEntity.java. Material infrastructure includes Redis, Firebase, Razorpay, AWS SQS configuration, async execution, and scheduled processing: src/main/java/com/quickserve/config/RedisConfig.java, src/main/java/com/quickserve/config/FirebaseConfig.java, src/main/java/com/quickserve/config/AwsSqsConfig.java, and src/main/java/com/quickserve/infrastructure/batch/NightlyRatingBatchJob.java. Local container dependencies are indicated by docker-compose.yml.
Main entry points: OrderController.java REST Controllers · PlaceOrderUseCaseImpl.java Order Placement · HandleRazorpayWebhookUseCaseImpl.java Payment Workflows · GetHomepageUseCaseImpl.java Homepage & Menu
Components 20
HTTP & Security
- JWT Security
src/main/java/com/quickserve/infrastructure/security/JwtAuthenticationFilter.java - REST Controllers · Auth, order, payment, catalog endpoints.
src/main/java/com/quickserve/presentation/OrderController.java - Razorpay Webhook
src/main/java/com/quickserve/presentation/PaymentWebhookController.java
Application Workflows
- OTP & Token Workflows
src/main/java/com/quickserve/application/usecase/VerifyOtpUseCaseImpl.java - Homepage & Menu
src/main/java/com/quickserve/application/usecase/GetHomepageUseCaseImpl.java - Cart Validation
src/main/java/com/quickserve/application/usecase/ValidateCartUseCaseImpl.java - Order Placement · Persists orders after validated cart summaries.
src/main/java/com/quickserve/application/usecase/PlaceOrderUseCaseImpl.java - Partner Dispatch · Selects and records partner acceptance.
src/main/java/com/quickserve/application/usecase/SelectPartnerUseCaseImpl.java - Payment Workflows · Payment options and webhook state handling.
src/main/java/com/quickserve/application/usecase/HandleRazorpayWebhookUseCaseImpl.java
Domain Boundary
- Order Repository Port
src/main/java/com/quickserve/domain/port/OrderRepositoryPort.java - Catalog Repository Port
src/main/java/com/quickserve/domain/port/CatalogRepositoryPort.java - Payment Repository Port
src/main/java/com/quickserve/domain/port/PaymentRepositoryPort.java - Firebase Dispatch Port
src/main/java/com/quickserve/domain/port/FirebaseDispatchPort.java
Infrastructure Adapters
- Order Persistence Adapter
src/main/java/com/quickserve/infrastructure/persistence/adapter/OrderPersistenceAdapter.java - Relational Database · Schema is managed by migration.sql.
src/main/resources/db/migration.sql - Redis Catalog Cache · Caches homepage and offering reads.
src/main/java/com/quickserve/infrastructure/cache/RedisHomepageCacheAdapter.java - Cache Rebuild Pipeline · Invalidates and asynchronously rebuilds offerings.
src/main/java/com/quickserve/infrastructure/invalidation/CacheInvalidationListener.java - Firebase Adapter
src/main/java/com/quickserve/infrastructure/persistence/adapter/FirebaseAdapter.java - Razorpay Service
src/main/java/com/quickserve/infrastructure/payment/RazorpayService.java
Other components
- Spring Boot App
src/main/java/com/quickserve/QuickServeApplication.java
Connections 24
- Spring Boot App → JWT Security: boots
- JWT Security → REST Controllers: protects
- REST Controllers → OTP & Token Workflows: auth requests
- REST Controllers → Homepage & Menu: catalog requests
- REST Controllers → Cart Validation: cart requests
- REST Controllers → Order Placement: order requests
- REST Controllers → Payment Workflows: payment requests
- Razorpay Webhook → Payment Workflows: payment callback
- Cart Validation → Catalog Repository Port: validates against
- Order Placement → Order Repository Port: persists
- Order Placement → Partner Dispatch: initiates dispatch
- Partner Dispatch → Order Repository Port: updates state
- Partner Dispatch → Firebase Dispatch Port: sends dispatch
- Homepage & Menu → Catalog Repository Port: reads catalog
- Homepage & Menu → Redis Catalog Cache: uses cached reads
- Payment Workflows → Payment Repository Port: persists state
- Payment Workflows → Razorpay Service: processes payments
- Order Repository Port → Order Persistence Adapter: implemented by
- Payment Repository Port → Order Persistence Adapter: stored through JPA
- Order Persistence Adapter → Relational Database: JPA persistence
- Catalog Repository Port → Relational Database: catalog data
- Firebase Dispatch Port → Firebase Adapter: implemented by
- Cache Rebuild Pipeline → Redis Catalog Cache: invalidates and rebuilds
- Order Placement → Cache Rebuild Pipeline: domain updates