# nhatduy288/tttn-project architecture

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

- Interactive diagram: https://gitdiagram.com/nhatduy288/tttn-project
- Repository: https://github.com/nhatduy288/tttn-project

## Overview

TTTN QL NVL is a Spring Boot/Thymeleaf materials and warehouse-management application. Users sign in under five business roles, maintain warehouses and materials, create purchase orders and warehouse requests, then move requests through approval and inventory-staff processing to physical receipt, issue, or transfer confirmation. Inventory lots and daily snapshots support stock and reporting views; status history provides an audit timeline. The README documents these capabilities and workflow stages; source excerpts confirm selected service interactions, so links for unsampled subsystems are limited to documented flows.

Main entry points: [`src/main/java/com/tttn/qlnvl/warehouserequest/application/WarehouseRequestService.java`](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouserequest/application/WarehouseRequestService.java) (Warehouse requests), [`src/main/java/com/tttn/qlnvl/inventory/repository/InventoryLotRepository.java`](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/repository/InventoryLotRepository.java) (Inventory records), [`src/main/java/com/tttn/qlnvl/purchaseorder/application/PurchaseOrderService.java`](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/purchaseorder/application/PurchaseOrderService.java) (Purchase orders), [`src/main/java/com/tttn/qlnvl/warehousetransaction/application/TransactionConfirmationService.java`](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehousetransaction/application/TransactionConfirmationService.java) (Receipt and issue)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and audit"]
  node_auth["Session and roles"]
  node_user_store[("User records")]
  node_audit["Status history"]
  node_history_store[("History records")]
end

subgraph group_catalog["Master data"]
  node_materials["Materials and groups"]
  node_material_store[("Material records")]
  node_warehouses["Warehouse registry"]
  node_warehouse_store[("Warehouse records")]
end

subgraph group_procurement["Procurement"]
  node_purchase_orders["Purchase orders"]
  node_po_store[("Order records")]
end

subgraph group_operations["Warehouse operations"]
  node_requests["Warehouse requests"]
  node_request_approval["Request approval"]
  node_transactions["Receipt and issue"]
  node_transfers["Warehouse transfers"]
end

subgraph group_inventory["Inventory and reports"]
  node_inventory["Lots and snapshots<br/>[InventoryLot.java]"]
  node_inventory_store[("Inventory records")]
  node_closing["Daily stock closing"]
  node_reports["Stock reports"]
end

node_user(("Business user"))
node_postgres[("PostgreSQL")]

node_user -->|"signs in"| node_auth
node_auth -->|"loads account"| node_user_store
node_user -->|"maintains catalog"| node_materials
node_materials -->|"reads and writes"| node_material_store
node_user -->|"maintains sites"| node_warehouses
node_warehouses -->|"reads and writes"| node_warehouse_store
node_user -->|"creates orders"| node_purchase_orders
node_purchase_orders -->|"validates items"| node_material_store
node_purchase_orders -->|"reads and writes"| node_po_store
node_user -->|"submits request"| node_requests
node_requests -->|"validates materials"| node_material_store
node_requests -->|"checks PO capacity"| node_po_store
node_requests -->|"checks availability"| node_inventory_store
node_requests -->|"enters approval"| node_request_approval
node_request_approval -->|"authorizes processing"| node_transactions
node_transactions -->|"confirms stock movement"| node_inventory_store
node_user -->|"confirms transfer"| node_transfers
node_transfers -->|"moves lot quantities"| node_inventory_store
node_transactions -->|"records status"| node_audit
node_transfers -->|"records status"| node_audit
node_audit -->|"reads and writes"| node_history_store
node_user -.->|"runs scheduled close"| node_closing
node_closing -->|"stores snapshots"| node_inventory_store
node_user -->|"views stock reports"| node_reports
node_reports -->|"aggregates movements"| node_inventory_store
node_reports -->|"queries data"| node_postgres

click node_auth "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/auth/web/AuthController.java"
click node_user_store "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/auth/repository/AppUserRepository.java"
click node_audit "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/shared/audit/StatusHistoryService.java"
click node_history_store "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/shared/audit/StatusHistoryRepository.java"
click node_materials "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/material/application/MaterialService.java"
click node_material_store "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/material/repository/MaterialRepository.java"
click node_warehouses "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouse/application/WarehouseService.java"
click node_warehouse_store "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouse/repository/WarehouseRepository.java"
click node_purchase_orders "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/purchaseorder/application/PurchaseOrderService.java"
click node_po_store "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/purchaseorder/repository/PurchaseOrderRepository.java"
click node_requests "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouserequest/application/WarehouseRequestService.java"
click node_request_approval "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouserequest/application/RequestApprovalService.java"
click node_transactions "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehousetransaction/application/TransactionConfirmationService.java"
click node_transfers "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehousetransfer/application/TransferConfirmationService.java"
click node_inventory "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/domain/InventoryLot.java"
click node_inventory_store "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/repository/InventoryLotRepository.java"
click node_closing "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/application/DailyStockClosingService.java"
click node_reports "https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/application/NxtReportService.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_auth,node_user_store,node_audit,node_history_store,node_user toneBlue
class node_materials,node_material_store,node_warehouses,node_warehouse_store,node_postgres toneAmber
class node_purchase_orders,node_po_store toneMint
class node_requests,node_request_approval,node_transactions,node_transfers toneRose
class node_inventory,node_inventory_store,node_closing,node_reports toneIndigo
```

## Components

### Identity and audit

- [Session and roles](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/auth/web/AuthController.java): `src/main/java/com/tttn/qlnvl/auth/web/AuthController.java`
- [User records](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/auth/repository/AppUserRepository.java): `src/main/java/com/tttn/qlnvl/auth/repository/AppUserRepository.java`
- [Status history](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/shared/audit/StatusHistoryService.java): `src/main/java/com/tttn/qlnvl/shared/audit/StatusHistoryService.java`
- [History records](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/shared/audit/StatusHistoryRepository.java): `src/main/java/com/tttn/qlnvl/shared/audit/StatusHistoryRepository.java`

### Master data

- [Materials and groups](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/material/application/MaterialService.java): `src/main/java/com/tttn/qlnvl/material/application/MaterialService.java`
- [Material records](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/material/repository/MaterialRepository.java): `src/main/java/com/tttn/qlnvl/material/repository/MaterialRepository.java`
- [Warehouse registry](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouse/application/WarehouseService.java): `src/main/java/com/tttn/qlnvl/warehouse/application/WarehouseService.java`
- [Warehouse records](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouse/repository/WarehouseRepository.java): `src/main/java/com/tttn/qlnvl/warehouse/repository/WarehouseRepository.java`

### Procurement

- [Purchase orders](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/purchaseorder/application/PurchaseOrderService.java): `src/main/java/com/tttn/qlnvl/purchaseorder/application/PurchaseOrderService.java`
- [Order records](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/purchaseorder/repository/PurchaseOrderRepository.java): `src/main/java/com/tttn/qlnvl/purchaseorder/repository/PurchaseOrderRepository.java`

### Warehouse operations

- [Warehouse requests](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouserequest/application/WarehouseRequestService.java): `src/main/java/com/tttn/qlnvl/warehouserequest/application/WarehouseRequestService.java`
- [Request approval](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehouserequest/application/RequestApprovalService.java): `src/main/java/com/tttn/qlnvl/warehouserequest/application/RequestApprovalService.java`
- [Receipt and issue](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehousetransaction/application/TransactionConfirmationService.java): `src/main/java/com/tttn/qlnvl/warehousetransaction/application/TransactionConfirmationService.java`
- [Warehouse transfers](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/warehousetransfer/application/TransferConfirmationService.java): `src/main/java/com/tttn/qlnvl/warehousetransfer/application/TransferConfirmationService.java`

### Inventory and reports

- [Lots and snapshots](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/domain/InventoryLot.java): `src/main/java/com/tttn/qlnvl/inventory/domain/InventoryLot.java`
- [Inventory records](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/repository/InventoryLotRepository.java): `src/main/java/com/tttn/qlnvl/inventory/repository/InventoryLotRepository.java`
- [Daily stock closing](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/application/DailyStockClosingService.java): `src/main/java/com/tttn/qlnvl/inventory/application/DailyStockClosingService.java`
- [Stock reports](https://github.com/nhatduy288/tttn-project/blob/main/src/main/java/com/tttn/qlnvl/inventory/application/NxtReportService.java): `src/main/java/com/tttn/qlnvl/inventory/application/NxtReportService.java`

### Other components

- **Business user**
- **PostgreSQL**

## Connections

- Business user → Session and roles: signs in
- Session and roles → User records: loads account
- Business user → Materials and groups: maintains catalog
- Materials and groups → Material records: reads and writes
- Business user → Warehouse registry: maintains sites
- Warehouse registry → Warehouse records: reads and writes
- Business user → Purchase orders: creates orders
- Purchase orders → Material records: validates items
- Purchase orders → Order records: reads and writes
- Business user → Warehouse requests: submits request
- Warehouse requests → Material records: validates materials
- Warehouse requests → Order records: checks PO capacity
- Warehouse requests → Inventory records: checks availability
- Warehouse requests → Request approval: enters approval
- Request approval → Receipt and issue: authorizes processing
- Receipt and issue → Inventory records: confirms stock movement
- Business user → Warehouse transfers: confirms transfer
- Warehouse transfers → Inventory records: moves lot quantities
- Receipt and issue → Status history: records status
- Warehouse transfers → Status history: records status
- Status history → History records: reads and writes
- Business user → Daily stock closing: runs scheduled close
- Daily stock closing → Inventory records: stores snapshots
- Business user → Stock reports: views stock reports
- Stock reports → Inventory records: aggregates movements
- Stock reports → PostgreSQL: queries data
