# sagarkakkalasworld/devops_maaya_workshop3 architecture

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

- Interactive diagram: https://gitdiagram.com/sagarkakkalasworld/devops_maaya_workshop3
- Repository: https://github.com/sagarkakkalasworld/devops_maaya_workshop3

## Overview

Maaya Store is a shopping application with a React storefront and a Spring backend. Shoppers browse products, view details, manage a cart, register or log in, and access an admin view; the backend exposes product, order, authentication, and admin endpoints. The graph includes the main UI routes, backend domain stages, persistence, and JWT security. Some frontend-to-backend calls and page behavior were not sampled, so those links are marked unverified rather than asserted as confirmed calls.

Main entry points: [`frontend/src/App.jsx`](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/App.jsx) (App routes), [`backend/src/main/java/com/maayastore/backend/controller/AuthController.java`](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/AuthController.java) (Auth endpoints), [`backend/src/main/java/com/maayastore/backend/repository/UserRepository.java`](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/repository/UserRepository.java) (User repository), [`frontend/src/context/CartContext.jsx`](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/context/CartContext.jsx) (Cart state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront UI"]
  node_app["App routes<br/>[App.jsx]"]
  node_navbar["Navigation<br/>[Navbar.jsx]"]
  node_productcard["Product card<br/>[ProductCard.jsx]"]
  node_productdetails["Product details<br/>[ProductDetails.jsx]"]
  node_cart["Cart page<br/>[Cart.jsx]"]
  node_cartstate["Cart state<br/>[CartContext.jsx]"]
  node_register["Registration page<br/>[Register.jsx]"]
  node_login["Login page<br/>[Login.jsx]"]
  node_adminui["Admin page<br/>[Admin.jsx]"]
end

subgraph group_identity["Identity and Security"]
  node_authcontroller["Auth endpoints"]
  node_userservice["User service<br/>[UserService.java]"]
  node_jwtservice["JWT service<br/>[JwtService.java]"]
  node_jwtfilter["JWT filter"]
  node_securityconfig["Security config"]
end

subgraph group_commerce["Catalog and Orders"]
  node_productcontroller["Product endpoints"]
  node_productservice["Product service"]
  node_ordercontroller["Order endpoints"]
  node_admincontroller["Admin endpoints"]
end

subgraph group_persistence["Persistence"]
  node_users["User records<br/>[User.java]"]
  node_products["Product records<br/>[Product.java]"]
  node_orders["Order records<br/>[Order.java]"]
  node_userrepo["User repository"]
  node_productrepo["Product repository"]
  node_orderrepo["Order repository"]
  node_database[("Relational database")]
end

node_shopper(("Shopper"))
node_api(("Store API"))

node_shopper -->|"uses"| node_app
node_app -->|"routes to"| node_productdetails
node_app -->|"routes to"| node_cart
node_app -->|"routes to"| node_register
node_app -->|"routes to"| node_login
node_app -->|"routes to"| node_adminui
node_app -->|"renders"| node_navbar
node_navbar -->|"reads cart"| node_cartstate
node_app -->|"renders"| node_productcard
node_productcard -->|"uses"| node_cartstate
node_productdetails -->|"uses"| node_cartstate
node_cart -->|"uses"| node_cartstate
node_app -->|"fetches products"| node_api
node_productdetails -.->|"requests details"| node_api
node_register -.->|"registers"| node_api
node_login -.->|"authenticates"| node_api
node_adminui -.->|"requests admin data"| node_api
node_api -.->|"routes product requests"| node_productcontroller
node_api -.->|"routes auth requests"| node_authcontroller
node_api -.->|"routes order requests"| node_ordercontroller
node_api -.->|"routes admin requests"| node_admincontroller
node_authcontroller -->|"registers through"| node_userservice
node_authcontroller -->|"looks up user"| node_userrepo
node_authcontroller -->|"creates token"| node_jwtservice
node_userservice -->|"saves and checks"| node_userrepo
node_jwtfilter -->|"validates token"| node_jwtservice
node_securityconfig -->|"configures filter"| node_jwtfilter
node_productcontroller -->|"delegates"| node_productservice
node_productservice -->|"queries and saves"| node_productrepo
node_ordercontroller -->|"accesses orders"| node_orderrepo
node_admincontroller -->|"reads users"| node_userrepo
node_admincontroller -->|"reads products"| node_productrepo
node_userrepo -->|"persists"| node_users
node_productrepo -->|"persists"| node_products
node_orderrepo -->|"persists"| node_orders
node_users -.->|"stored in"| node_database
node_products -.->|"stored in"| node_database
node_orders -.->|"stored in"| node_database

click node_app "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/App.jsx"
click node_navbar "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/components/Navbar.jsx"
click node_productcard "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/components/ProductCard.jsx"
click node_productdetails "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/ProductDetails.jsx"
click node_cart "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Cart.jsx"
click node_cartstate "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/context/CartContext.jsx"
click node_register "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Register.jsx"
click node_login "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Login.jsx"
click node_adminui "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Admin.jsx"
click node_authcontroller "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/AuthController.java"
click node_userservice "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/service/UserService.java"
click node_jwtservice "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/service/JwtService.java"
click node_jwtfilter "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/security/JwtAuthenticationFilter.java"
click node_securityconfig "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/config/SecurityConfig.java"
click node_productcontroller "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/ProductController.java"
click node_productservice "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/service/ProductService.java"
click node_ordercontroller "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/OrderController.java"
click node_admincontroller "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/AdminController.java"
click node_users "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/entity/User.java"
click node_products "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/entity/Product.java"
click node_orders "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/entity/Order.java"
click node_userrepo "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/repository/UserRepository.java"
click node_productrepo "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/repository/ProductRepository.java"
click node_orderrepo "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/repository/OrderRepository.java"
click node_database "https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/resources/application.properties"

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_app,node_navbar,node_productcard,node_productdetails,node_cart,node_cartstate,node_register,node_login,node_adminui toneBlue
class node_authcontroller,node_userservice,node_jwtservice,node_jwtfilter,node_securityconfig toneAmber
class node_productcontroller,node_productservice,node_ordercontroller,node_admincontroller,node_api toneMint
class node_users,node_products,node_orders,node_userrepo,node_productrepo,node_orderrepo,node_database toneRose
class node_shopper toneIndigo
```

## Components

### Storefront UI

- [App routes](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Navigation](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/components/Navbar.jsx): `frontend/src/components/Navbar.jsx`
- [Product card](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/components/ProductCard.jsx): `frontend/src/components/ProductCard.jsx`
- [Product details](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/ProductDetails.jsx): `frontend/src/pages/ProductDetails.jsx`
- [Cart page](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Cart.jsx): `frontend/src/pages/Cart.jsx`
- [Cart state](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/context/CartContext.jsx): `frontend/src/context/CartContext.jsx`
- [Registration page](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Register.jsx): `frontend/src/pages/Register.jsx`
- [Login page](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Login.jsx): `frontend/src/pages/Login.jsx`
- [Admin page](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/frontend/src/pages/Admin.jsx): `frontend/src/pages/Admin.jsx`

### Identity and Security

- [Auth endpoints](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/AuthController.java): `backend/src/main/java/com/maayastore/backend/controller/AuthController.java`
- [User service](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/service/UserService.java): `backend/src/main/java/com/maayastore/backend/service/UserService.java`
- [JWT service](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/service/JwtService.java): `backend/src/main/java/com/maayastore/backend/service/JwtService.java`
- [JWT filter](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/security/JwtAuthenticationFilter.java): `backend/src/main/java/com/maayastore/backend/security/JwtAuthenticationFilter.java`
- [Security config](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/config/SecurityConfig.java): `backend/src/main/java/com/maayastore/backend/config/SecurityConfig.java`

### Catalog and Orders

- [Product endpoints](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/ProductController.java): `backend/src/main/java/com/maayastore/backend/controller/ProductController.java`
- [Product service](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/service/ProductService.java): `backend/src/main/java/com/maayastore/backend/service/ProductService.java`
- [Order endpoints](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/OrderController.java): `backend/src/main/java/com/maayastore/backend/controller/OrderController.java`
- [Admin endpoints](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/controller/AdminController.java): `backend/src/main/java/com/maayastore/backend/controller/AdminController.java`

### Persistence

- [User records](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/entity/User.java): `backend/src/main/java/com/maayastore/backend/entity/User.java`
- [Product records](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/entity/Product.java): `backend/src/main/java/com/maayastore/backend/entity/Product.java`
- [Order records](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/entity/Order.java): `backend/src/main/java/com/maayastore/backend/entity/Order.java`
- [User repository](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/repository/UserRepository.java): `backend/src/main/java/com/maayastore/backend/repository/UserRepository.java`
- [Product repository](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/repository/ProductRepository.java): `backend/src/main/java/com/maayastore/backend/repository/ProductRepository.java`
- [Order repository](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/java/com/maayastore/backend/repository/OrderRepository.java): `backend/src/main/java/com/maayastore/backend/repository/OrderRepository.java`
- [Relational database](https://github.com/sagarkakkalasworld/devops_maaya_workshop3/blob/main/backend/src/main/resources/application.properties): `backend/src/main/resources/application.properties`

### Other components

- **Shopper**
- **Store API**

## Connections

- Shopper → App routes: uses (evidence: `frontend/src/App.jsx`)
- App routes → Product details: routes to (evidence: `frontend/src/App.jsx`)
- App routes → Cart page: routes to (evidence: `frontend/src/App.jsx`)
- App routes → Registration page: routes to (evidence: `frontend/src/App.jsx`)
- App routes → Login page: routes to (evidence: `frontend/src/App.jsx`)
- App routes → Admin page: routes to (evidence: `frontend/src/App.jsx`)
- App routes → Navigation: renders (evidence: `frontend/src/App.jsx`)
- Navigation → Cart state: reads cart (evidence: `frontend/src/components/Navbar.jsx`)
- App routes → Product card: renders (evidence: `frontend/src/App.jsx`)
- Product card → Cart state: uses (evidence: `frontend/src/components/ProductCard.jsx`)
- Product details → Cart state: uses (evidence: `frontend/src/pages/ProductDetails.jsx`)
- Cart page → Cart state: uses (evidence: `frontend/src/pages/Cart.jsx`)
- App routes → Store API: fetches products (evidence: `frontend/src/App.jsx`)
- Product details → Store API: requests details
- Registration page → Store API: registers
- Login page → Store API: authenticates
- Admin page → Store API: requests admin data
- Store API → Product endpoints: routes product requests
- Store API → Auth endpoints: routes auth requests
- Store API → Order endpoints: routes order requests
- Store API → Admin endpoints: routes admin requests
- Auth endpoints → User service: registers through (evidence: `backend/src/main/java/com/maayastore/backend/controller/AuthController.java`)
- Auth endpoints → User repository: looks up user (evidence: `backend/src/main/java/com/maayastore/backend/controller/AuthController.java`)
- Auth endpoints → JWT service: creates token (evidence: `backend/src/main/java/com/maayastore/backend/controller/AuthController.java`)
- User service → User repository: saves and checks (evidence: `backend/src/main/java/com/maayastore/backend/service/UserService.java`)
- JWT filter → JWT service: validates token (evidence: `backend/src/main/java/com/maayastore/backend/security/JwtAuthenticationFilter.java`)
- Security config → JWT filter: configures filter (evidence: `backend/src/main/java/com/maayastore/backend/config/SecurityConfig.java`)
- Product endpoints → Product service: delegates (evidence: `backend/src/main/java/com/maayastore/backend/controller/ProductController.java`)
- Product service → Product repository: queries and saves (evidence: `backend/src/main/java/com/maayastore/backend/service/ProductService.java`)
- Order endpoints → Order repository: accesses orders (evidence: `backend/src/main/java/com/maayastore/backend/controller/OrderController.java`)
- Admin endpoints → User repository: reads users (evidence: `backend/src/main/java/com/maayastore/backend/controller/AdminController.java`)
- Admin endpoints → Product repository: reads products (evidence: `backend/src/main/java/com/maayastore/backend/controller/AdminController.java`)
- User repository → User records: persists (evidence: `backend/src/main/java/com/maayastore/backend/repository/UserRepository.java`)
- Product repository → Product records: persists (evidence: `backend/src/main/java/com/maayastore/backend/repository/ProductRepository.java`)
- Order repository → Order records: persists (evidence: `backend/src/main/java/com/maayastore/backend/repository/OrderRepository.java`)
- User records → Relational database: stored in
- Product records → Relational database: stored in
- Order records → Relational database: stored in
