# huuzinhh/ocop-platform architecture

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

- Interactive diagram: https://gitdiagram.com/huuzinhh/ocop-platform
- Repository: https://github.com/huuzinhh/ocop-platform

## Overview

OCOP is a marketplace and producer-promotion platform: customers discover products, add them to a cart, place and mock-pay for orders, then producers/admins manage offerings and fulfillment. Separate capabilities cover authentication, producer analytics and verification, GIS discovery, and batch/event traceability. The README describes blockchain-backed hashes and AI/RAG guidance, but no blockchain or chatbot implementation appears in the supplied tree; those remain documented capabilities rather than evidenced runtime links. Arrows cite shown calls or explicit README claims; uninspected controller/service links are left out where unsupported.

Main entry points: [`frontend/src/App.jsx`](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/App.jsx) (Web workspace), [`backend/src/main/java/com/ocop/service/TraceService.java`](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/TraceService.java) (Batch and event trace), [`backend/src/main/java/com/ocop/service/AuthService.java`](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/AuthService.java) (Accounts and roles), [`backend/src/main/java/com/ocop/service/OrderService.java`](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/OrderService.java) (Order and mock payment)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["Web workspace<br/>[App.jsx]"]
  node_authstate["Auth state<br/>[AuthContext.jsx]"]
  node_cartstate["Cart state<br/>[CartContext.jsx]"]
  node_api["HTTP client<br/>[axiosClient.js]"]
  node_authapi["Auth API<br/>[authApi.js]"]
  node_catalogapi["Catalog API<br/>[ocopApi.js]"]
  node_traceapi["Trace API<br/>[traceApi.js]"]
end

subgraph group_identity["Identity and operations"]
  node_authcontroller["Authentication endpoints"]
  node_authservice["Accounts and roles<br/>[AuthService.java]"]
  node_authrepo[("Account store")]
  node_cert["OCOP certification review"]
  node_stats["Sales dashboards<br/>[StatsService.java]"]
end

subgraph group_commerce["Marketplace"]
  node_productcontroller["Catalog endpoints"]
  node_productservice["Catalog management"]
  node_productrepo[("Product store")]
  node_ordercontroller["Order endpoints"]
  node_orderservice["Order and mock payment<br/>[OrderService.java]"]
  node_orderstore[("Order data")]
  node_cartcontroller["Cart endpoints"]
  node_cartservice["Cart management<br/>[CartService.java]"]
end

subgraph group_trust["Regional trust"]
  node_gis["GIS discovery<br/>[GisService.java]"]
  node_tracecontroller["Trace endpoints"]
  node_traceservice["Batch and event trace<br/>[TraceService.java]"]
  node_tracebatch[("Production batches")]
  node_traceevents[("Production events")]
  node_ai["AI / RAG recommendations"]
  node_blockchain[("Blockchain hash ledger")]
end

node_actor(("Customer / producer / admin"))
node_postgres[("PostgreSQL")]
node_qr["QR code service"]

node_actor -->|"uses"| node_app
node_app -->|"reads identity"| node_authstate
node_app -->|"uses cart"| node_cartstate
node_authstate -->|"calls"| node_authapi
node_authapi -->|"sends requests"| node_api
node_app -->|"uses"| node_catalogapi
node_app -->|"uses"| node_traceapi
node_cartstate -->|"supports shopping"| node_actor
node_actor -->|"submits auth"| node_authcontroller
node_authcontroller -.->|"delegates"| node_authservice
node_authservice -->|"reads / saves users"| node_authrepo
node_authservice -.->|"persists accounts"| node_postgres
node_actor -.->|"browses catalog"| node_productcontroller
node_productcontroller -->|"delegates"| node_productservice
node_productservice -->|"searches / manages"| node_productrepo
node_productrepo -.->|"queries products"| node_postgres
node_actor -.->|"manages cart"| node_cartcontroller
node_cartcontroller -.->|"delegates"| node_cartservice
node_actor -->|"places order"| node_ordercontroller
node_ordercontroller -->|"delegates"| node_orderservice
node_orderservice -->|"reads / saves"| node_orderstore
node_orderservice -.->|"stores payment and shipment"| node_postgres
node_actor -->|"explores regions"| node_gis
node_actor -->|"scans / requests trace"| node_tracecontroller
node_tracecontroller -->|"delegates"| node_traceservice
node_traceservice -->|"creates / looks up batches"| node_tracebatch
node_traceservice -->|"records events"| node_traceevents
node_traceservice -->|"builds QR URL"| node_qr
node_actor -.->|"reviews certificates"| node_cert
node_actor -.->|"views sales metrics"| node_stats
node_actor -->|"gets recommendations / guidance"| node_ai
node_actor -->|"verifies batch hashes"| node_blockchain

click node_app "https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/App.jsx"
click node_authstate "https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/context/AuthContext.jsx"
click node_cartstate "https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/context/CartContext.jsx"
click node_api "https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/axiosClient.js"
click node_authapi "https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/authApi.js"
click node_catalogapi "https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/ocopApi.js"
click node_traceapi "https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/traceApi.js"
click node_authcontroller "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/AuthController.java"
click node_authservice "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/AuthService.java"
click node_authrepo "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/UserRepository.java"
click node_productcontroller "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/ProductController.java"
click node_productservice "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/ProductService.java"
click node_productrepo "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/ProductRepository.java"
click node_ordercontroller "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/OrderController.java"
click node_orderservice "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/OrderService.java"
click node_orderstore "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/OrderRepository.java"
click node_cartcontroller "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/CartController.java"
click node_cartservice "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/CartService.java"
click node_gis "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/GisService.java"
click node_tracecontroller "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/TraceController.java"
click node_traceservice "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/TraceService.java"
click node_tracebatch "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/ProductionBatchRepository.java"
click node_traceevents "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/ProductionEventRepository.java"
click node_cert "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/OcopCertificateService.java"
click node_stats "https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/StatsService.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_app,node_authstate,node_cartstate,node_api,node_authapi,node_catalogapi,node_traceapi toneBlue
class node_authcontroller,node_authservice,node_authrepo,node_cert,node_stats,node_postgres toneAmber
class node_productcontroller,node_productservice,node_productrepo,node_ordercontroller,node_orderservice,node_orderstore,node_cartcontroller,node_cartservice toneMint
class node_gis,node_tracecontroller,node_traceservice,node_tracebatch,node_traceevents,node_ai,node_blockchain toneRose
class node_actor,node_qr toneIndigo
```

## Components

### Web application

- [Web workspace](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Auth state](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [Cart state](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/context/CartContext.jsx): `frontend/src/context/CartContext.jsx`
- [HTTP client](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/axiosClient.js): `frontend/src/api/axiosClient.js`
- [Auth API](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/authApi.js): `frontend/src/api/authApi.js`
- [Catalog API](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/ocopApi.js): `frontend/src/api/ocopApi.js`
- [Trace API](https://github.com/huuzinhh/ocop-platform/blob/main/frontend/src/api/traceApi.js): `frontend/src/api/traceApi.js`

### Identity and operations

- [Authentication endpoints](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/AuthController.java): `backend/src/main/java/com/ocop/controller/AuthController.java`
- [Accounts and roles](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/AuthService.java): `backend/src/main/java/com/ocop/service/AuthService.java`
- [Account store](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/UserRepository.java): `backend/src/main/java/com/ocop/repository/UserRepository.java`
- [OCOP certification review](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/OcopCertificateService.java): `backend/src/main/java/com/ocop/service/OcopCertificateService.java`
- [Sales dashboards](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/StatsService.java): `backend/src/main/java/com/ocop/service/StatsService.java`

### Marketplace

- [Catalog endpoints](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/ProductController.java): `backend/src/main/java/com/ocop/controller/ProductController.java`
- [Catalog management](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/ProductService.java): `backend/src/main/java/com/ocop/service/ProductService.java`
- [Product store](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/ProductRepository.java): `backend/src/main/java/com/ocop/repository/ProductRepository.java`
- [Order endpoints](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/OrderController.java): `backend/src/main/java/com/ocop/controller/OrderController.java`
- [Order and mock payment](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/OrderService.java): `backend/src/main/java/com/ocop/service/OrderService.java`
- [Order data](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/OrderRepository.java): `backend/src/main/java/com/ocop/repository/OrderRepository.java`
- [Cart endpoints](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/CartController.java): `backend/src/main/java/com/ocop/controller/CartController.java`
- [Cart management](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/CartService.java): `backend/src/main/java/com/ocop/service/CartService.java`

### Regional trust

- [GIS discovery](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/GisService.java): `backend/src/main/java/com/ocop/service/GisService.java`
- [Trace endpoints](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/controller/TraceController.java): `backend/src/main/java/com/ocop/controller/TraceController.java`
- [Batch and event trace](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/service/TraceService.java): `backend/src/main/java/com/ocop/service/TraceService.java`
- [Production batches](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/ProductionBatchRepository.java): `backend/src/main/java/com/ocop/repository/ProductionBatchRepository.java`
- [Production events](https://github.com/huuzinhh/ocop-platform/blob/main/backend/src/main/java/com/ocop/repository/ProductionEventRepository.java): `backend/src/main/java/com/ocop/repository/ProductionEventRepository.java`
- **AI / RAG recommendations**
- **Blockchain hash ledger**

### Other components

- **Customer / producer / admin**
- **PostgreSQL**
- **QR code service**

## Connections

- Customer / producer / admin → Web workspace: uses (evidence: `README.md`)
- Web workspace → Auth state: reads identity (evidence: `frontend/src/App.jsx`)
- Web workspace → Cart state: uses cart (evidence: `frontend/src/App.jsx`)
- Auth state → Auth API: calls (evidence: `frontend/src/context/AuthContext.jsx`)
- Auth API → HTTP client: sends requests (evidence: `frontend/src/api/authApi.js`)
- Web workspace → Catalog API: uses (evidence: `frontend/src/App.jsx`)
- Web workspace → Trace API: uses (evidence: `frontend/src/App.jsx`)
- Cart state → Customer / producer / admin: supports shopping (evidence: `frontend/src/context/CartContext.jsx`)
- Customer / producer / admin → Authentication endpoints: submits auth
- Authentication endpoints → Accounts and roles: delegates
- Accounts and roles → Account store: reads / saves users (evidence: `backend/src/main/java/com/ocop/service/AuthService.java`)
- Accounts and roles → PostgreSQL: persists accounts
- Customer / producer / admin → Catalog endpoints: browses catalog
- Catalog endpoints → Catalog management: delegates (evidence: `backend/src/main/java/com/ocop/controller/ProductController.java`)
- Catalog management → Product store: searches / manages (evidence: `backend/src/main/java/com/ocop/service/ProductService.java`)
- Product store → PostgreSQL: queries products
- Customer / producer / admin → Cart endpoints: manages cart
- Cart endpoints → Cart management: delegates (evidence: `backend/src/main/java/com/ocop/controller/CartController.java`)
- Customer / producer / admin → Order endpoints: places order (evidence: `README.md`)
- Order endpoints → Order and mock payment: delegates (evidence: `backend/src/main/java/com/ocop/controller/OrderController.java`)
- Order and mock payment → Order data: reads / saves (evidence: `backend/src/main/java/com/ocop/service/OrderService.java`)
- Order and mock payment → PostgreSQL: stores payment and shipment
- Customer / producer / admin → GIS discovery: explores regions (evidence: `README.md`)
- Customer / producer / admin → Trace endpoints: scans / requests trace (evidence: `README.md`)
- Trace endpoints → Batch and event trace: delegates (evidence: `backend/src/main/java/com/ocop/controller/TraceController.java`)
- Batch and event trace → Production batches: creates / looks up batches (evidence: `backend/src/main/java/com/ocop/service/TraceService.java`)
- Batch and event trace → Production events: records events (evidence: `backend/src/main/java/com/ocop/service/TraceService.java`)
- Batch and event trace → QR code service: builds QR URL (evidence: `backend/src/main/java/com/ocop/service/TraceService.java`)
- Customer / producer / admin → OCOP certification review: reviews certificates
- Customer / producer / admin → Sales dashboards: views sales metrics
- Customer / producer / admin → AI / RAG recommendations: gets recommendations / guidance (evidence: `README.md`)
- Customer / producer / admin → Blockchain hash ledger: verifies batch hashes (evidence: `README.md`)
