# huyduong10/inventory- architecture

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

- Interactive diagram: https://gitdiagram.com/huyduong10/inventory-
- Repository: https://github.com/huyduong10/inventory-

## Overview

This is an internal warehouse and office-supplies allocation application. Users manage product inventory and create or review purchase proposals and handover documents; completed handovers and exports reduce stock, while purchase-proposal stocking increases it. The React app coordinates product and document actions through an HTTP client to Express routes and controllers, which persist records in MongoDB. The tree also identifies export and reporting features, though their implementation was not sampled; those branches are shown at their supported source paths without inferring detailed behavior.

Main entry points: [`client/src/App.jsx`](https://github.com/huyduong10/inventory-/blob/main/client/src/App.jsx) (App coordinator), [`server/src/app.js`](https://github.com/huyduong10/inventory-/blob/main/server/src/app.js) (Express API), [`server/src/models/Product.js`](https://github.com/huyduong10/inventory-/blob/main/server/src/models/Product.js) (Product records), [`server/src/controllers/purchaseProposalController.js`](https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/purchaseProposalController.js) (Purchase proposals)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_app["App coordinator<br/>[App.jsx]"]
  node_http["HTTP client<br/>[client.js]"]
  node_products_ui["Product management"]
  node_creation_ui["Document creation"]
  node_list_ui["Document list<br/>[DocumentList.jsx]"]
  node_templates_ui["PDF templates<br/>[PdfTemplates.jsx]"]
  node_client_identity["Document identity"]
  node_client_saved["Saved formats<br/>[savedFormats.js]"]
end

subgraph group_api["Warehouse API"]
  node_server_app["Express API<br/>[app.js]"]
  node_product_routes["Product routes<br/>[productRoutes.js]"]
  node_purchase_routes["Purchase routes"]
  node_handover_routes["Handover routes<br/>[handoverRoutes.js]"]
  node_export_routes["Export routes<br/>[exportRoutes.js]"]
  node_report_routes["Report routes<br/>[reportRoutes.js]"]
  node_product_controller["Product operations"]
  node_purchase_controller["Purchase proposals"]
  node_handover_controller["Handover notes"]
  node_export_controller["Export orders"]
  node_report_controller["Reporting"]
end

subgraph group_data["Domain data"]
  node_product_model[("Product records<br/>[Product.js]")]
  node_purchase_model[("Purchase records")]
  node_handover_model[("Handover records<br/>[HandoverNote.js]")]
  node_export_model[("Export records<br/>[ExportOrder.js]")]
end

node_user(("Staff user"))
node_mongo[("MongoDB")]

node_user -->|"uses"| node_app
node_app -->|"renders"| node_products_ui
node_app -->|"renders"| node_creation_ui
node_app -->|"renders"| node_list_ui
node_app -->|"renders"| node_templates_ui
node_app -->|"requests"| node_http
node_app -->|"identifies documents"| node_client_identity
node_app -->|"reads saved formats"| node_client_saved
node_http -->|"sends HTTP"| node_server_app
node_server_app -->|"dispatches"| node_product_routes
node_server_app -->|"dispatches"| node_purchase_routes
node_server_app -->|"dispatches"| node_handover_routes
node_server_app -->|"dispatches"| node_export_routes
node_server_app -->|"dispatches"| node_report_routes
node_product_routes -->|"dispatches"| node_product_controller
node_purchase_routes -->|"dispatches"| node_purchase_controller
node_handover_routes -->|"dispatches"| node_handover_controller
node_export_routes -->|"dispatches"| node_export_controller
node_report_routes -->|"dispatches"| node_report_controller
node_product_controller -->|"reads and writes"| node_product_model
node_purchase_controller -->|"reads and writes"| node_purchase_model
node_purchase_controller -->|"resolves and stocks"| node_product_model
node_handover_controller -->|"reads and writes"| node_handover_model
node_handover_controller -->|"checks and decrements"| node_product_model
node_export_controller -->|"reads and writes"| node_export_model
node_export_controller -->|"adjusts stock"| node_product_model
node_product_model -->|"persists"| node_mongo
node_purchase_model -->|"persists"| node_mongo
node_handover_model -->|"persists"| node_mongo
node_export_model -->|"persists"| node_mongo

click node_app "https://github.com/huyduong10/inventory-/blob/main/client/src/App.jsx"
click node_http "https://github.com/huyduong10/inventory-/blob/main/client/src/api/client.js"
click node_products_ui "https://github.com/huyduong10/inventory-/blob/main/client/src/components/ProductManagement.jsx"
click node_creation_ui "https://github.com/huyduong10/inventory-/blob/main/client/src/components/DocumentCreation.jsx"
click node_list_ui "https://github.com/huyduong10/inventory-/blob/main/client/src/components/DocumentList.jsx"
click node_templates_ui "https://github.com/huyduong10/inventory-/blob/main/client/src/components/PdfTemplates.jsx"
click node_client_identity "https://github.com/huyduong10/inventory-/blob/main/client/src/lib/documentIdentity.js"
click node_client_saved "https://github.com/huyduong10/inventory-/blob/main/client/src/lib/savedFormats.js"
click node_server_app "https://github.com/huyduong10/inventory-/blob/main/server/src/app.js"
click node_product_routes "https://github.com/huyduong10/inventory-/blob/main/server/src/routes/productRoutes.js"
click node_purchase_routes "https://github.com/huyduong10/inventory-/blob/main/server/src/routes/purchaseProposalRoutes.js"
click node_handover_routes "https://github.com/huyduong10/inventory-/blob/main/server/src/routes/handoverRoutes.js"
click node_export_routes "https://github.com/huyduong10/inventory-/blob/main/server/src/routes/exportRoutes.js"
click node_report_routes "https://github.com/huyduong10/inventory-/blob/main/server/src/routes/reportRoutes.js"
click node_product_controller "https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/productController.js"
click node_purchase_controller "https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/purchaseProposalController.js"
click node_handover_controller "https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/handoverController.js"
click node_export_controller "https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/exportController.js"
click node_report_controller "https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/reportController.js"
click node_product_model "https://github.com/huyduong10/inventory-/blob/main/server/src/models/Product.js"
click node_purchase_model "https://github.com/huyduong10/inventory-/blob/main/server/src/models/PurchaseProposal.js"
click node_handover_model "https://github.com/huyduong10/inventory-/blob/main/server/src/models/HandoverNote.js"
click node_export_model "https://github.com/huyduong10/inventory-/blob/main/server/src/models/ExportOrder.js"

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_http,node_products_ui,node_creation_ui,node_list_ui,node_templates_ui,node_client_identity,node_client_saved,node_user toneBlue
class node_server_app,node_product_routes,node_purchase_routes,node_handover_routes,node_export_routes,node_report_routes,node_product_controller,node_purchase_controller,node_handover_controller,node_export_controller,node_report_controller,node_mongo toneAmber
class node_product_model,node_purchase_model,node_handover_model,node_export_model toneMint
```

## Components

### React client

- [App coordinator](https://github.com/huyduong10/inventory-/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [HTTP client](https://github.com/huyduong10/inventory-/blob/main/client/src/api/client.js): `client/src/api/client.js`
- [Product management](https://github.com/huyduong10/inventory-/blob/main/client/src/components/ProductManagement.jsx): `client/src/components/ProductManagement.jsx`
- [Document creation](https://github.com/huyduong10/inventory-/blob/main/client/src/components/DocumentCreation.jsx): `client/src/components/DocumentCreation.jsx`
- [Document list](https://github.com/huyduong10/inventory-/blob/main/client/src/components/DocumentList.jsx): `client/src/components/DocumentList.jsx`
- [PDF templates](https://github.com/huyduong10/inventory-/blob/main/client/src/components/PdfTemplates.jsx): `client/src/components/PdfTemplates.jsx`
- [Document identity](https://github.com/huyduong10/inventory-/blob/main/client/src/lib/documentIdentity.js): `client/src/lib/documentIdentity.js`
- [Saved formats](https://github.com/huyduong10/inventory-/blob/main/client/src/lib/savedFormats.js): `client/src/lib/savedFormats.js`

### Warehouse API

- [Express API](https://github.com/huyduong10/inventory-/blob/main/server/src/app.js): `server/src/app.js`
- [Product routes](https://github.com/huyduong10/inventory-/blob/main/server/src/routes/productRoutes.js): `server/src/routes/productRoutes.js`
- [Purchase routes](https://github.com/huyduong10/inventory-/blob/main/server/src/routes/purchaseProposalRoutes.js): `server/src/routes/purchaseProposalRoutes.js`
- [Handover routes](https://github.com/huyduong10/inventory-/blob/main/server/src/routes/handoverRoutes.js): `server/src/routes/handoverRoutes.js`
- [Export routes](https://github.com/huyduong10/inventory-/blob/main/server/src/routes/exportRoutes.js): `server/src/routes/exportRoutes.js`
- [Report routes](https://github.com/huyduong10/inventory-/blob/main/server/src/routes/reportRoutes.js): `server/src/routes/reportRoutes.js`
- [Product operations](https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/productController.js): `server/src/controllers/productController.js`
- [Purchase proposals](https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/purchaseProposalController.js): `server/src/controllers/purchaseProposalController.js`
- [Handover notes](https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/handoverController.js): `server/src/controllers/handoverController.js`
- [Export orders](https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/exportController.js): `server/src/controllers/exportController.js`
- [Reporting](https://github.com/huyduong10/inventory-/blob/main/server/src/controllers/reportController.js): `server/src/controllers/reportController.js`

### Domain data

- [Product records](https://github.com/huyduong10/inventory-/blob/main/server/src/models/Product.js): `server/src/models/Product.js`
- [Purchase records](https://github.com/huyduong10/inventory-/blob/main/server/src/models/PurchaseProposal.js): `server/src/models/PurchaseProposal.js`
- [Handover records](https://github.com/huyduong10/inventory-/blob/main/server/src/models/HandoverNote.js): `server/src/models/HandoverNote.js`
- [Export records](https://github.com/huyduong10/inventory-/blob/main/server/src/models/ExportOrder.js): `server/src/models/ExportOrder.js`

### Other components

- **Staff user**
- **MongoDB**

## Connections

- Staff user → App coordinator: uses
- App coordinator → Product management: renders
- App coordinator → Document creation: renders
- App coordinator → Document list: renders
- App coordinator → PDF templates: renders
- App coordinator → HTTP client: requests
- App coordinator → Document identity: identifies documents
- App coordinator → Saved formats: reads saved formats
- HTTP client → Express API: sends HTTP
- Express API → Product routes: dispatches
- Express API → Purchase routes: dispatches
- Express API → Handover routes: dispatches
- Express API → Export routes: dispatches
- Express API → Report routes: dispatches
- Product routes → Product operations: dispatches
- Purchase routes → Purchase proposals: dispatches
- Handover routes → Handover notes: dispatches
- Export routes → Export orders: dispatches
- Report routes → Reporting: dispatches
- Product operations → Product records: reads and writes
- Purchase proposals → Purchase records: reads and writes
- Purchase proposals → Product records: resolves and stocks
- Handover notes → Handover records: reads and writes
- Handover notes → Product records: checks and decrements
- Export orders → Export records: reads and writes
- Export orders → Product records: adjusts stock
- Product records → MongoDB: persists
- Purchase records → MongoDB: persists
- Handover records → MongoDB: persists
- Export records → MongoDB: persists
