# khoidep-zai/cdtn1-nguyenbaanhkhoi-l2 architecture

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

- Interactive diagram: https://gitdiagram.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2
- Repository: https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2

## Overview

This is a prototype warranty-intake and preliminary-issue-classification application. Its intended workflow is customer lookup or registration, ticket creation, issue classification and SLA calculation, then status updates with a history timeline and ticket listing/detail views. The browser currently implements several ticket actions as UI simulations; customer lookup is the sampled live API integration. Backend ticket APIs are present, but ticket state is held in memory, not PostgreSQL. The README describes technician assignment as a later handoff; sampled code does not implement it. Dataset and loader internals are only partially evidenced.

Main entry points: [`src/backend/services/ticketService.js`](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/services/ticketService.js) (Ticket workflow), [`src/backend/index.js`](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/index.js) (Express app), [`src/backend/data/dataLoader.js`](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/data/dataLoader.js) (Dataset loader), [`src/frontend/app.js`](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/frontend/app.js) (Reception screens)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Reception UI"]
  node_browser["Reception screens<br/>[app.js]"]
end

subgraph group_http["HTTP API"]
  node_server["Express app<br/>[index.js]"]
  node_customer_routes["Customer routes<br/>[customerRoutes.js]"]
  node_ticket_routes["Ticket routes<br/>[ticketRoutes.js]"]
  node_catalog_routes["Catalog routes<br/>[catalogRoutes.js]"]
  node_ticket_validation["Ticket validation<br/>[validateTicket.js]"]
end

subgraph group_domain["Intake Domain"]
  node_customer_controller["Customer operations"]
  node_ticket_controller["Ticket operations"]
  node_catalog_controller["Catalog operations"]
  node_ticket_service["Ticket workflow<br/>[ticketService.js]"]
  node_sla["SLA calculation<br/>[slaHelper.js]"]
  node_phone["Phone normalization<br/>[phoneHelper.js]"]
  node_config["Status configuration<br/>[index.js]"]
end

subgraph group_data["Reference Data"]
  node_loader["Dataset loader<br/>[dataLoader.js]"]
  node_csv_data["Warranty CSV data"]
end

node_receptionist(("Receptionist"))
node_future_assignment["Technician handoff"]

node_receptionist -->|"uses"| node_browser
node_browser -->|"loads UI"| node_server
node_server -->|"mounts"| node_customer_routes
node_server -->|"mounts"| node_ticket_routes
node_server -->|"mounts"| node_catalog_routes
node_browser -->|"looks up customer"| node_customer_routes
node_customer_routes -->|"dispatches"| node_customer_controller
node_customer_controller -->|"normalizes phone"| node_phone
node_customer_controller -->|"finds or adds customer"| node_loader
node_ticket_routes -->|"validates create/status"| node_ticket_validation
node_ticket_routes -->|"dispatches"| node_ticket_controller
node_ticket_controller -->|"invokes workflow"| node_ticket_service
node_ticket_service -->|"loads initial tickets"| node_loader
node_ticket_service -->|"calculates due date"| node_sla
node_ticket_service -->|"reads statuses"| node_config
node_catalog_routes -->|"dispatches"| node_catalog_controller
node_catalog_controller -->|"reads catalogs"| node_loader
node_loader -->|"loads records"| node_csv_data
node_ticket_service -.->|"handoff intended"| node_future_assignment

click node_browser "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/frontend/app.js"
click node_server "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/index.js"
click node_customer_routes "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/routes/customerRoutes.js"
click node_ticket_routes "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/routes/ticketRoutes.js"
click node_catalog_routes "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/routes/catalogRoutes.js"
click node_ticket_validation "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/middlewares/validateTicket.js"
click node_customer_controller "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/controllers/customerController.js"
click node_ticket_controller "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/controllers/ticketController.js"
click node_catalog_controller "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/controllers/catalogController.js"
click node_ticket_service "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/services/ticketService.js"
click node_sla "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/utils/slaHelper.js"
click node_phone "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/utils/phoneHelper.js"
click node_config "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/config/index.js"
click node_loader "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/data/dataLoader.js"
click node_csv_data "https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/tree/main/dataset"

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_browser toneBlue
class node_server,node_customer_routes,node_ticket_routes,node_catalog_routes,node_ticket_validation toneAmber
class node_customer_controller,node_ticket_controller,node_catalog_controller,node_ticket_service,node_sla,node_phone,node_config toneMint
class node_loader,node_csv_data toneRose
class node_receptionist,node_future_assignment toneIndigo
```

## Components

### Reception UI

- [Reception screens](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/frontend/app.js): `src/frontend/app.js`

### HTTP API

- [Express app](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/index.js): `src/backend/index.js`
- [Customer routes](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/routes/customerRoutes.js): `src/backend/routes/customerRoutes.js`
- [Ticket routes](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/routes/ticketRoutes.js): `src/backend/routes/ticketRoutes.js`
- [Catalog routes](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/routes/catalogRoutes.js): `src/backend/routes/catalogRoutes.js`
- [Ticket validation](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/middlewares/validateTicket.js): `src/backend/middlewares/validateTicket.js`

### Intake Domain

- [Customer operations](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/controllers/customerController.js): `src/backend/controllers/customerController.js`
- [Ticket operations](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/controllers/ticketController.js): `src/backend/controllers/ticketController.js`
- [Catalog operations](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/controllers/catalogController.js): `src/backend/controllers/catalogController.js`
- [Ticket workflow](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/services/ticketService.js): `src/backend/services/ticketService.js`
- [SLA calculation](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/utils/slaHelper.js): `src/backend/utils/slaHelper.js`
- [Phone normalization](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/utils/phoneHelper.js): `src/backend/utils/phoneHelper.js`
- [Status configuration](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/config/index.js): `src/backend/config/index.js`

### Reference Data

- [Dataset loader](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/blob/main/src/backend/data/dataLoader.js): `src/backend/data/dataLoader.js`
- [Warranty CSV data](https://github.com/khoidep-zai/cdtn1-nguyenbaanhkhoi-l2/tree/main/dataset): `dataset`

### Other components

- **Receptionist**
- **Technician handoff**

## Connections

- Receptionist → Reception screens: uses
- Reception screens → Express app: loads UI
- Express app → Customer routes: mounts
- Express app → Ticket routes: mounts
- Express app → Catalog routes: mounts
- Reception screens → Customer routes: looks up customer
- Customer routes → Customer operations: dispatches
- Customer operations → Phone normalization: normalizes phone
- Customer operations → Dataset loader: finds or adds customer
- Ticket routes → Ticket validation: validates create/status
- Ticket routes → Ticket operations: dispatches
- Ticket operations → Ticket workflow: invokes workflow
- Ticket workflow → Dataset loader: loads initial tickets
- Ticket workflow → SLA calculation: calculates due date
- Ticket workflow → Status configuration: reads statuses
- Catalog routes → Catalog operations: dispatches
- Catalog operations → Dataset loader: reads catalogs
- Dataset loader → Warranty CSV data: loads records
- Ticket workflow → Technician handoff: handoff intended
