How dineshkarthick21/coffee-portal-springboot works
Purpose and Entry Points
JavaBite is a role-based coffee-shop management system: customers browse, order, book tables, pay, and submit feedback; staff process orders; admins manage operations. The browser app starts at frontend/src/main.jsx and routes from frontend/src/App.jsx. The Spring Boot API starts at backend/src/main/java/com/javabite/JavaBiteApplication.java.
Frontend Application Shell
React/Vite provides separate customer, admin, chef, waiter, authentication, and payment views. Shared dashboard chrome centralizes role-oriented navigation in frontend/src/layout/DashboardLayout.jsx; page areas are rooted under frontend/src/pages/Admin, frontend/src/pages/Customer, frontend/src/pages/Chef, and frontend/src/pages/Waiter. HTTP requests flow through frontend/src/api/apiClient.js to the configurable backend URL.
Authentication and Access Boundary
JWT authentication is shared across frontend and backend. Client session/token state and protected-route gating reside in frontend/src/auth/AuthContext.jsx and frontend/src/auth/PrivateRoute.jsx. Backend login, registration, password recovery, and token operations enter through backend/src/main/java/com/javabite/controller/AuthController.java, are implemented by backend/src/main/java/com/javabite/service/AuthService.java, and pass through backend/src/main/java/com/javabite/config/JwtAuthenticationFilter.java plus backend/src/main/java/com/javabite/config/SecurityConfig.java. Roles are represented by backend/src/main/java/com/javabite/entity/Role.java.
Core Operational Domains
REST controllers form the API boundary; services apply domain logic; Mongo repositories persist aggregates. The main lifecycle domains are:
• Menu and image-backed catalog: backend/src/main/java/com/javabite/controller/MenuController.java, backend/src/main/java/com/javabite/service/MenuItemService.java, backend/src/main/java/com/javabite/entity/MenuItem.java.
• Orders and kitchen/service workflow: backend/src/main/java/com/javabite/controller/OrderController.java, backend/src/main/java/com/javabite/service/OrderService.java, backend/src/main/java/com/javabite/entity/Order.java.
• Table inventory and reservations: backend/src/main/java/com/javabite/controller/BookingController.java, backend/src/main/java/com/javabite/service/BookingService.java, backend/src/main/java/com/javabite/entity/Booking.java.
• Payments: backend/src/main/java/com/javabite/controller/PaymentController.java, backend/src/main/java/com/javabite/service/PaymentService.java, backend/src/main/java/com/javabite/entity/Payment.java.
• Feedback intake and administrative status/analytics: backend/src/main/java/com/javabite/controller/FeedbackController.java, backend/src/main/java/com/javabite/service/FeedbackService.java, backend/src/main/java/com/javabite/entity/Feedback.java.
Data and Integration Flow
Requests use DTOs at the controller boundary, such as backend/src/main/java/com/javabite/dto/CreateOrderRequest.java and backend/src/main/java/com/javabite/dto/PaymentVerificationRequest.java. Services translate these to MongoDB documents and repositories, including backend/src/main/java/com/javabite/repository/OrderRepository.java, backend/src/main/java/com/javabite/repository/BookingRepository.java, and backend/src/main/java/com/javabite/repository/UserRepository.java. Payment infrastructure is configured in backend/src/main/java/com/javabite/config/RazorpayConfig.java; email, PDFs, and local file uploads are isolated in backend/src/main/java/com/javabite/service/EmailService.java, backend/src/main/java/com/javabite/service/PdfService.java, and backend/src/main/java/com/javabite/service/FileService.java.
Runtime and Deployment
Backend runtime is Java 17, Spring Boot 3.2, Maven, Spring Security, and MongoDB; configuration is under backend/src/main/resources/application.properties. The frontend is React 19 with Vite, deployed as a static/Nginx container via frontend/Dockerfile and frontend/nginx.conf. Local container orchestration provisions MongoDB and backend in docker-compose.yml; Render deployment topology is defined by render.yaml. Uploaded menu media is filesystem-backed under backend/uploads/menu, so it requires persistent volume or external object storage in production.
Main entry points: SecurityConfig.java JWT security boundary · OrderRepository.java MongoDB · App.jsx Application routes · MenuController.java Menu catalog
Components 18
React frontend
- React/Vite entry
frontend/src/main.jsx - Application routes
frontend/src/App.jsx - Role dashboards · Customer, admin, chef, and waiter views share role-oriented navigation.
frontend/src/layout/DashboardLayout.jsx - Client auth guard
frontend/src/auth/AuthContext.jsx - API client
frontend/src/api/apiClient.js
Spring Boot API
- Spring Boot API
backend/src/main/java/com/javabite/JavaBiteApplication.java - JWT security boundary · Validates JWTs and enforces role-based access.
backend/src/main/java/com/javabite/config/SecurityConfig.java - Authentication API · Login, registration, recovery, and token operations.
backend/src/main/java/com/javabite/controller/AuthController.java
Operational domains
- Menu catalog
backend/src/main/java/com/javabite/controller/MenuController.java - Order workflow · Customer orders flow through kitchen and service operations.
backend/src/main/java/com/javabite/controller/OrderController.java - Reservations
backend/src/main/java/com/javabite/controller/BookingController.java - Payments · Verifies payment requests and records payments.
backend/src/main/java/com/javabite/controller/PaymentController.java - Feedback & analytics
backend/src/main/java/com/javabite/controller/FeedbackController.java
Data & integrations
- MongoDB · Repositories persist users, orders, bookings, and domain aggregates.
backend/src/main/java/com/javabite/repository/OrderRepository.java - Razorpay
backend/src/main/java/com/javabite/config/RazorpayConfig.java - Email & PDF delivery
backend/src/main/java/com/javabite/service/EmailService.java - Menu media storage · Production requires persistent storage or object storage.
backend/uploads/menu - Container deployment · Provisions backend and MongoDB; frontend is served by Nginx.
docker-compose.yml
Connections 24
- React/Vite entry → Application routes: mounts
- Application routes → Role dashboards: renders
- Application routes → Client auth guard: protects routes
- Client auth guard → API client: supplies JWT
- Role dashboards → API client: requests
- API client → Spring Boot API: HTTP/JSON
- Spring Boot API → JWT security boundary: secures requests
- JWT security boundary → Authentication API: permits auth flows
- JWT security boundary → Menu catalog: authorizes
- JWT security boundary → Order workflow: authorizes
- JWT security boundary → Reservations: authorizes
- JWT security boundary → Payments: authorizes
- JWT security boundary → Feedback & analytics: authorizes
- Authentication API → MongoDB: users & roles
- Menu catalog → MongoDB: menu documents
- Menu catalog → Menu media storage: stores images
- Order workflow → MongoDB: order documents
- Reservations → MongoDB: booking documents
- Payments → Razorpay: verifies payments
- Payments → MongoDB: payment records
- Feedback & analytics → MongoDB: feedback records
- Order workflow → Email & PDF delivery: order documents
- Container deployment → Spring Boot API: runs backend
- Container deployment → MongoDB: provisions