# dineshkarthick21/coffee-portal-springboot architecture

> Architecture diagram of the GitHub repository dineshkarthick21/coffee-portal-springboot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dineshkarthick21/coffee-portal-springboot
- Repository: https://github.com/dineshkarthick21/coffee-portal-springboot

## Overview

#### 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: [`backend/src/main/java/com/javabite/config/SecurityConfig.java`](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/config/SecurityConfig.java) (JWT security boundary), [`backend/src/main/java/com/javabite/repository/OrderRepository.java`](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/repository/OrderRepository.java) (MongoDB), [`frontend/src/App.jsx`](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/App.jsx) (Application routes), [`backend/src/main/java/com/javabite/controller/MenuController.java`](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/MenuController.java) (Menu catalog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["React frontend"]
  node_frontend_entry["React/Vite entry<br/>frontend entry<br/>[main.jsx]"]
  node_app_routes["Application routes<br/>React router<br/>[App.jsx]"]
  node_dashboard["Role dashboards<br/>shared layout &amp; pages"]
  node_client_auth["Client auth guard<br/>[AuthContext.jsx]"]
  node_api_client["API client<br/>HTTP client<br/>[apiClient.js]"]
end

subgraph group_backend["Spring Boot API"]
  node_api_entry["Spring Boot API<br/>application entry"]
  node_security["JWT security boundary<br/>filter chain"]
  node_auth_api["Authentication API<br/>controller &amp; service"]
end

subgraph group_domains["Operational domains"]
  node_catalog["Menu catalog"]
  node_orders["Order workflow"]
  node_bookings["Reservations"]
  node_payments["Payments"]
  node_feedback["Feedback &amp; analytics"]
end

subgraph group_infrastructure["Data &amp; integrations"]
  node_mongodb[("MongoDB<br/>document database")]
  node_razorpay["Razorpay<br/>payment gateway"]
  node_notifications["Email &amp; PDF delivery<br/>document communications<br/>[EmailService.java]"]
  node_menu_uploads["Menu media storage<br/>filesystem uploads"]
  node_deployment{{"Container deployment<br/>Compose &amp; Render topology<br/>[docker-compose.yml]"}}
end

node_frontend_entry -->|"mounts"| node_app_routes
node_app_routes -->|"renders"| node_dashboard
node_app_routes -->|"protects routes"| node_client_auth
node_client_auth -->|"supplies JWT"| node_api_client
node_dashboard -->|"requests"| node_api_client
node_api_client -->|"HTTP/JSON"| node_api_entry
node_api_entry -->|"secures requests"| node_security
node_security -->|"permits auth flows"| node_auth_api
node_security -->|"authorizes"| node_catalog
node_security -->|"authorizes"| node_orders
node_security -->|"authorizes"| node_bookings
node_security -->|"authorizes"| node_payments
node_security -->|"authorizes"| node_feedback
node_auth_api -->|"users &amp; roles"| node_mongodb
node_catalog -->|"menu documents"| node_mongodb
node_catalog -->|"stores images"| node_menu_uploads
node_orders -->|"order documents"| node_mongodb
node_bookings -->|"booking documents"| node_mongodb
node_payments -->|"verifies payments"| node_razorpay
node_payments -->|"payment records"| node_mongodb
node_feedback -->|"feedback records"| node_mongodb
node_orders -->|"order documents"| node_notifications
node_deployment -->|"runs backend"| node_api_entry
node_deployment -->|"provisions"| node_mongodb

click node_frontend_entry "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/main.jsx"
click node_app_routes "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/App.jsx"
click node_dashboard "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/layout/DashboardLayout.jsx"
click node_client_auth "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/auth/AuthContext.jsx"
click node_api_client "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/api/apiClient.js"
click node_api_entry "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/JavaBiteApplication.java"
click node_security "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/config/SecurityConfig.java"
click node_auth_api "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/AuthController.java"
click node_catalog "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/MenuController.java"
click node_orders "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/OrderController.java"
click node_bookings "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/BookingController.java"
click node_payments "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/PaymentController.java"
click node_feedback "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/FeedbackController.java"
click node_mongodb "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/repository/OrderRepository.java"
click node_razorpay "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/config/RazorpayConfig.java"
click node_notifications "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/service/EmailService.java"
click node_menu_uploads "https://github.com/dineshkarthick21/coffee-portal-springboot/tree/main/backend/uploads/menu"
click node_deployment "https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/docker-compose.yml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_frontend_entry,node_app_routes,node_dashboard,node_client_auth,node_api_client toneBlue
class node_api_entry,node_security,node_auth_api toneAmber
class node_catalog,node_orders,node_bookings,node_payments,node_feedback toneMint
class node_mongodb,node_razorpay,node_notifications,node_menu_uploads,node_deployment toneRose
```

## Components

### React frontend

- [React/Vite entry](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/main.jsx): frontend entry · `frontend/src/main.jsx`
- [Application routes](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/App.jsx): React router · `frontend/src/App.jsx`
- [Role dashboards](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/layout/DashboardLayout.jsx): shared layout & pages · Customer, admin, chef, and waiter views share role-oriented navigation. · `frontend/src/layout/DashboardLayout.jsx`
- [Client auth guard](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/auth/AuthContext.jsx): JWT session & route guard · `frontend/src/auth/AuthContext.jsx`
- [API client](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/frontend/src/api/apiClient.js): HTTP client · `frontend/src/api/apiClient.js`

### Spring Boot API

- [Spring Boot API](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/JavaBiteApplication.java): application entry · `backend/src/main/java/com/javabite/JavaBiteApplication.java`
- [JWT security boundary](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/config/SecurityConfig.java): filter chain · Validates JWTs and enforces role-based access. · `backend/src/main/java/com/javabite/config/SecurityConfig.java`
- [Authentication API](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/AuthController.java): controller & service · Login, registration, recovery, and token operations. · `backend/src/main/java/com/javabite/controller/AuthController.java`

### Operational domains

- [Menu catalog](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/MenuController.java): controller → service → document · `backend/src/main/java/com/javabite/controller/MenuController.java`
- [Order workflow](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/OrderController.java): controller → service → document · Customer orders flow through kitchen and service operations. · `backend/src/main/java/com/javabite/controller/OrderController.java`
- [Reservations](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/BookingController.java): controller → service → document · `backend/src/main/java/com/javabite/controller/BookingController.java`
- [Payments](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/PaymentController.java): controller → service → document · Verifies payment requests and records payments. · `backend/src/main/java/com/javabite/controller/PaymentController.java`
- [Feedback & analytics](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/controller/FeedbackController.java): controller → service → document · `backend/src/main/java/com/javabite/controller/FeedbackController.java`

### Data & integrations

- [MongoDB](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/repository/OrderRepository.java): document database · Repositories persist users, orders, bookings, and domain aggregates. · `backend/src/main/java/com/javabite/repository/OrderRepository.java`
- [Razorpay](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/config/RazorpayConfig.java): payment gateway · `backend/src/main/java/com/javabite/config/RazorpayConfig.java`
- [Email & PDF delivery](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/backend/src/main/java/com/javabite/service/EmailService.java): document communications · `backend/src/main/java/com/javabite/service/EmailService.java`
- [Menu media storage](https://github.com/dineshkarthick21/coffee-portal-springboot/tree/main/backend/uploads/menu): filesystem uploads · Production requires persistent storage or object storage. · `backend/uploads/menu`
- [Container deployment](https://github.com/dineshkarthick21/coffee-portal-springboot/blob/main/docker-compose.yml): Compose & Render topology · Provisions backend and MongoDB; frontend is served by Nginx. · `docker-compose.yml`

## Connections

- 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
