# subhadip15/ecobazaarx architecture

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

- Interactive diagram: https://gitdiagram.com/subhadip15/ecobazaarx
- Repository: https://github.com/subhadip15/ecobazaarx

## Overview

#### Purpose and Entry Points
EcoBazaarX is a full-stack eco-commerce application: catalog, cart, wishlist, checkout/orders, addresses, admin product management, recommendations, and carbon insights. The React SPA starts at `Frontend/src/index.js` and composes routing/UI in `Frontend/src/App.js`. The Spring Boot API starts at `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/SignupFormApplication.java`.

#### Client Application Boundary
The frontend is a React application whose pages represent customer and administrative flows, including catalog/detail, checkout, orders, insights, and administration. Shared navigation and protected navigation are centralized in `Frontend/src/components/MainNavbar.jsx` and `Frontend/src/components/ProtectedRoute.jsx`. API base configuration is isolated in `Frontend/src/config/api.js`, with service modules forming the browser-to-backend boundary, e.g. `Frontend/src/services/api.js`, `Frontend/src/services/authService.js`, and `Frontend/src/services/orderService.js`.

#### Client State and Commerce Flow
Cart and wishlist state are maintained as React contexts, allowing product pages, navbar, and cart/wishlist pages to share client-side state: `Frontend/src/context/CartContext.jsx` and `Frontend/src/context/WishlistContext.jsx`. A typical purchase path is catalog/detail → cart → checkout/payment → success/order history, represented by `Frontend/src/pages/ProductCatalog.jsx`, `Frontend/src/pages/CheckoutPage.jsx`, and `Frontend/src/pages/OrderSuccess.jsx`. Toast notifications are a separate cross-cutting UI context at `Frontend/src/context/ToastContext.jsx`.

#### API Layer and Authentication
Spring MVC controllers expose domain-oriented API entry points for authentication, products, carts, orders, insights, and administration: `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/AuthController.java`, `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/OrderController.java`, and `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/AdminController.java`. JWT authentication is enforced at the server boundary through `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/security/SecurityConfig.java`, `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/security/JwtFilter.java`, and `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/security/JwtUtil.java`. Authentication includes registration, login, and the README-described forgotten-password/OTP capability via the auth and email service area.

#### Domain Services and Transactional Workflows
Controllers delegate business logic to services rather than directly owning persistence behavior. Key workflows include auth/user handling (`Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/AuthService.java`), cart mutation (`Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CartService.java`), and checkout/order creation (`Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CheckoutService.java`). Request/response DTOs establish the API contract and prevent exposing entities directly, notably `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/dto/auth/LoginRequest.java`, `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/dto/order/CheckoutRequest.java`, and `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/dto/product/ProductResponse.java`.

#### Persistence and Core Model
The backend uses Spring Data-style repositories over a relational model, intended by the README to be MySQL. Core entities model users, products, carts, orders, shipping, addresses, and carbon data: `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/entity/Users.java`, `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/entity/Order.java`, and `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/entity/CarbonData.java`. Persistence boundaries are represented by repositories such as `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/UserRepository.java`, `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/OrderRepository.java`, and `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/ProductRepository.java`.

#### Sustainability, Recommendations, and Integrations
Carbon calculation and insights are distinct backend capabilities, surfaced through dedicated controllers/services and persisted carbon entities: `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CarbonCalculationService.java`, `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/InsightsService.java`, and `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/InsightsController.java`. Product recommendations are similarly isolated in `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/RecommendationService.java`. External integration seams include email/OTP delivery through `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/EmailService.java` and frontend Cloudinary media handling through `Frontend/src/services/cloudinaryService.js`.

Main entry points: [`Frontend/src/App.js`](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/App.js) (App routes and pages), [`Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/OrderController.java`](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/OrderController.java) (Domain API controllers), [`Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/OrderRepository.java`](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/OrderRepository.java) (Spring Data repositories), [`Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/AuthService.java`](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/AuthService.java) (Auth and user service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["React client"]
  node_react_entry["React entry<br/>SPA bootstrap<br/>[index.js]"]
  node_app_routes["App routes and pages<br/>React UI<br/>[App.js]"]
  node_navigation_guard["Navigation and route guard<br/>shared UI<br/>[ProtectedRoute.jsx]"]
  node_commerce_state["Cart and wishlist state<br/>React contexts<br/>[CartContext.jsx]"]
  node_checkout_flow["Checkout and order flow<br/>React pages<br/>[CheckoutPage.jsx]"]
  node_toast_state["Toast notifications<br/>React context<br/>[ToastContext.jsx]"]
  node_api_services{{"API service boundary<br/>browser services<br/>[api.js]"}}
  node_cloudinary_client["Cloudinary media client<br/>media service"]
end

subgraph group_backend["Spring Boot API"]
  node_spring_entry["Spring Boot entry<br/>application bootstrap"]
  node_security{{"JWT security boundary<br/>Spring Security"}}
  node_api_controllers["Domain API controllers<br/>Spring MVC"]
  node_dto_contracts["Request and response DTOs<br/>API contracts"]
  node_auth_service["Auth and user service<br/>domain service<br/>[AuthService.java]"]
  node_commerce_services["Cart and checkout services<br/>domain services"]
  node_sustainability_services["Insights and recommendations<br/>domain services"]
  node_email_service["Email and OTP service<br/>integration service<br/>[EmailService.java]"]
  node_repositories["Spring Data repositories<br/>persistence layer"]
  node_relational_model[("Commerce relational model<br/>JPA entities<br/>[Order.java]")]
end

subgraph group_external["External systems"]
  node_mysql[("MySQL<br/>relational database")]
  node_cloudinary["Cloudinary<br/>media platform"]
  node_email_provider["Email delivery<br/>external provider"]
end

node_react_entry -->|"mounts"| node_app_routes
node_app_routes -->|"uses"| node_navigation_guard
node_app_routes -->|"shares state"| node_commerce_state
node_app_routes -->|"routes to"| node_checkout_flow
node_app_routes -->|"notifies through"| node_toast_state
node_app_routes -->|"requests data"| node_api_services
node_app_routes -->|"handles media"| node_cloudinary_client
node_cloudinary_client -->|"uploads media"| node_cloudinary
node_api_services -->|"HTTP with JWT"| node_security
node_spring_entry -->|"configures"| node_security
node_security -->|"authorizes requests"| node_api_controllers
node_api_controllers -->|"binds contracts"| node_dto_contracts
node_api_controllers -->|"delegates auth"| node_auth_service
node_api_controllers -->|"delegates commerce"| node_commerce_services
node_api_controllers -->|"delegates insights"| node_sustainability_services
node_auth_service -->|"sends OTP"| node_email_service
node_email_service -->|"delivers via"| node_email_provider
node_auth_service -->|"persists users"| node_repositories
node_commerce_services -->|"persists carts and orders"| node_repositories
node_sustainability_services -->|"reads product and carbon data"| node_repositories
node_repositories -->|"maps"| node_relational_model
node_relational_model -->|"stored in"| node_mysql

click node_react_entry "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/index.js"
click node_app_routes "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/App.js"
click node_navigation_guard "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/components/ProtectedRoute.jsx"
click node_commerce_state "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/context/CartContext.jsx"
click node_checkout_flow "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/pages/CheckoutPage.jsx"
click node_toast_state "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/context/ToastContext.jsx"
click node_api_services "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/services/api.js"
click node_cloudinary_client "https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/services/cloudinaryService.js"
click node_spring_entry "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/SignupFormApplication.java"
click node_security "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/security/SecurityConfig.java"
click node_api_controllers "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/OrderController.java"
click node_dto_contracts "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/dto/order/CheckoutRequest.java"
click node_auth_service "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/AuthService.java"
click node_commerce_services "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CheckoutService.java"
click node_sustainability_services "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CarbonCalculationService.java"
click node_email_service "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/EmailService.java"
click node_repositories "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/OrderRepository.java"
click node_relational_model "https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/entity/Order.java"

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_react_entry,node_app_routes,node_navigation_guard,node_commerce_state,node_checkout_flow,node_toast_state,node_api_services,node_cloudinary_client toneBlue
class node_spring_entry,node_security,node_api_controllers,node_dto_contracts,node_auth_service,node_commerce_services,node_sustainability_services,node_email_service,node_repositories,node_relational_model toneAmber
class node_mysql,node_cloudinary,node_email_provider toneMint
```

## Components

### React client

- [React entry](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/index.js): SPA bootstrap · `Frontend/src/index.js`
- [App routes and pages](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/App.js): React UI · Customer and administrative flows are composed here. · `Frontend/src/App.js`
- [Navigation and route guard](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/components/ProtectedRoute.jsx): shared UI · `Frontend/src/components/ProtectedRoute.jsx`
- [Cart and wishlist state](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/context/CartContext.jsx): React contexts · `Frontend/src/context/CartContext.jsx`
- [Checkout and order flow](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/pages/CheckoutPage.jsx): React pages · Catalog, checkout, success, and order history flow. · `Frontend/src/pages/CheckoutPage.jsx`
- [Toast notifications](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/context/ToastContext.jsx): React context · `Frontend/src/context/ToastContext.jsx`
- [API service boundary](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/services/api.js): browser services · Config and domain service modules call the API. · `Frontend/src/services/api.js`
- [Cloudinary media client](https://github.com/subhadip15/ecobazaarx/blob/main/Frontend/src/services/cloudinaryService.js): media service · `Frontend/src/services/cloudinaryService.js`

### Spring Boot API

- [Spring Boot entry](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/SignupFormApplication.java): application bootstrap · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/SignupFormApplication.java`
- [JWT security boundary](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/security/SecurityConfig.java): Spring Security · Filters protected requests and authenticates JWTs. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/security/SecurityConfig.java`
- [Domain API controllers](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/OrderController.java): Spring MVC · Auth, product, cart, order, insights, and admin endpoints. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/controller/OrderController.java`
- [Request and response DTOs](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/dto/order/CheckoutRequest.java): API contracts · Keeps entities out of the public API. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/dto/order/CheckoutRequest.java`
- [Auth and user service](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/AuthService.java): domain service · Registration, login, and password recovery workflows. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/AuthService.java`
- [Cart and checkout services](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CheckoutService.java): domain services · Cart mutation and transactional order creation. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CheckoutService.java`
- [Insights and recommendations](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CarbonCalculationService.java): domain services · Carbon calculation, insights, and recommendations. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/CarbonCalculationService.java`
- [Email and OTP service](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/EmailService.java): integration service · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/service/EmailService.java`
- [Spring Data repositories](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/OrderRepository.java): persistence layer · Repositories access user, product, and order data. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/repository/OrderRepository.java`
- [Commerce relational model](https://github.com/subhadip15/ecobazaarx/blob/main/Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/entity/Order.java): JPA entities · Users, products, carts, orders, addresses, shipping, and carbon data. · `Backend/SignupForm/SignupForm/src/main/java/com/SignupForm/entity/Order.java`

### External systems

- **MySQL**: relational database · Intended production datastore.
- **Cloudinary**: media platform
- **Email delivery**: external provider · Delivers OTP and recovery email.

## Connections

- React entry → App routes and pages: mounts
- App routes and pages → Navigation and route guard: uses
- App routes and pages → Cart and wishlist state: shares state
- App routes and pages → Checkout and order flow: routes to
- App routes and pages → Toast notifications: notifies through
- App routes and pages → API service boundary: requests data
- App routes and pages → Cloudinary media client: handles media
- Cloudinary media client → Cloudinary: uploads media
- API service boundary → JWT security boundary: HTTP with JWT
- Spring Boot entry → JWT security boundary: configures
- JWT security boundary → Domain API controllers: authorizes requests
- Domain API controllers → Request and response DTOs: binds contracts
- Domain API controllers → Auth and user service: delegates auth
- Domain API controllers → Cart and checkout services: delegates commerce
- Domain API controllers → Insights and recommendations: delegates insights
- Auth and user service → Email and OTP service: sends OTP
- Email and OTP service → Email delivery: delivers via
- Auth and user service → Spring Data repositories: persists users
- Cart and checkout services → Spring Data repositories: persists carts and orders
- Insights and recommendations → Spring Data repositories: reads product and carbon data
- Spring Data repositories → Commerce relational model: maps
- Commerce relational model → MySQL: stored in
