# cacetius/hub8 architecture

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

- Interactive diagram: https://gitdiagram.com/cacetius/hub8
- Repository: https://github.com/cacetius/hub8

## Overview

HUB 8 is an operations-app portal and API for factory catalogs, users, shifts, dashboards, and audit. The intended user flow is to authenticate, load the app catalog and dashboard, filter or search apps, and open a selected app; administrators also manage users and operational records. The tree contains both a documented Node.js API and a substantial Java backend implementation, so both are represented. The README describes capabilities beyond the excerpts; uncertain links are omitted rather than inferred.

Main entry points: [`backend/src/routes`](https://github.com/cacetius/hub8/tree/main/backend/src/routes) (API routes), [`backend/src/repositories`](https://github.com/cacetius/hub8/tree/main/backend/src/repositories) (Repositories), [`backend/src/app.js`](https://github.com/cacetius/hub8/blob/main/backend/src/app.js) (Express API), [`backend/src/adapters`](https://github.com/cacetius/hub8/tree/main/backend/src/adapters) (DB adapters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Portal clients"]
  node_react["Hub portal<br/>[main.jsx]"]
  node_api_client["API client<br/>[api.js]"]
  node_internal_apps["Internal apps<br/>[hub-client.js]"]
end

subgraph group_api["Node API"]
  node_api_app["Express API<br/>[app.js]"]
  node_routes["API routes"]
  node_auth["Authentication and RBAC"]
  node_app_domain["App management<br/>[AppService.js]"]
  node_factory_domain["Factory catalogs"]
  node_user_domain["User administration"]
  node_audit_domain["Audit queries<br/>[AuditService.js]"]
  node_dashboard["Dashboard"]
end

subgraph group_data["Node data layer"]
  node_adapters["DB adapters"]
  node_database[("DB2 / SQL Server")]
  node_node_repos["Repositories"]
end

subgraph group_java["Java backend"]
  node_java_api["Java API controller"]
  node_java_service["Hub service<br/>[HubService.java]"]
  node_java_persistence["JDBC repositories"]
  node_file_store["File and backup store"]
end

subgraph group_migration["Data migration"]
  node_legacy_migration["Legacy data import<br/>[migrate-legacy.js]"]
end

node_operator(("Hub user"))
node_sharepoint["SharePoint storage"]

node_operator -->|"uses"| node_react
node_react -->|"requests data"| node_api_client
node_react -->|"loads catalog"| node_api_client
node_api_client -.->|"calls API"| node_api_app
node_internal_apps -.->|"uses API"| node_api_app
node_api_app -->|"mounts routes"| node_routes
node_api_app -->|"checks readiness"| node_adapters
node_routes -->|"guards requests"| node_auth
node_routes -->|"dispatches app actions"| node_app_domain
node_routes -->|"dispatches catalog actions"| node_factory_domain
node_routes -.->|"dispatches user actions"| node_user_domain
node_routes -.->|"dispatches audit queries"| node_audit_domain
node_routes -.->|"routes dashboard"| node_dashboard
node_app_domain -.->|"uses repositories"| node_node_repos
node_factory_domain -->|"uses repositories"| node_node_repos
node_user_domain -.->|"uses repositories"| node_node_repos
node_audit_domain -.->|"uses repository"| node_node_repos
node_node_repos -.->|"queries through"| node_adapters
node_adapters -->|"connects to"| node_database
node_legacy_migration -->|"imports legacy data"| node_adapters
node_java_api -->|"delegates requests"| node_java_service
node_java_service -->|"uses repositories"| node_java_persistence
node_java_api -->|"uploads and retrieves files"| node_file_store
node_file_store -.->|"stores files"| node_sharepoint

click node_react "https://github.com/cacetius/hub8/blob/main/frontend/hub-react/src/main.jsx"
click node_api_client "https://github.com/cacetius/hub8/blob/main/frontend/hub-react/src/api.js"
click node_internal_apps "https://github.com/cacetius/hub8/blob/main/frontend/services/hub-client.js"
click node_api_app "https://github.com/cacetius/hub8/blob/main/backend/src/app.js"
click node_routes "https://github.com/cacetius/hub8/tree/main/backend/src/routes"
click node_auth "https://github.com/cacetius/hub8/tree/main/backend/src/middleware"
click node_app_domain "https://github.com/cacetius/hub8/blob/main/backend/src/services/AppService.js"
click node_factory_domain "https://github.com/cacetius/hub8/blob/main/backend/src/services/FactoryCatalogService.js"
click node_user_domain "https://github.com/cacetius/hub8/blob/main/backend/src/services/AdminUserService.js"
click node_audit_domain "https://github.com/cacetius/hub8/blob/main/backend/src/services/AuditService.js"
click node_dashboard "https://github.com/cacetius/hub8/blob/main/backend/src/routes/dashboard.routes.js"
click node_adapters "https://github.com/cacetius/hub8/tree/main/backend/src/adapters"
click node_node_repos "https://github.com/cacetius/hub8/tree/main/backend/src/repositories"
click node_java_api "https://github.com/cacetius/hub8/blob/main/backend-java/src/main/java/com/hub8/backend/api/HubApiController.java"
click node_java_service "https://github.com/cacetius/hub8/blob/main/backend-java/src/main/java/com/hub8/backend/service/HubService.java"
click node_java_persistence "https://github.com/cacetius/hub8/tree/main/backend-java/src/main/java/com/hub8/backend/persistence"
click node_file_store "https://github.com/cacetius/hub8/blob/main/backend-java/src/main/java/com/hub8/backend/persistence/SharePointFileStore.java"
click node_legacy_migration "https://github.com/cacetius/hub8/blob/main/database/seeds/migrate-legacy.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_react,node_api_client,node_internal_apps,node_operator toneBlue
class node_api_app,node_routes,node_auth,node_app_domain,node_factory_domain,node_user_domain,node_audit_domain,node_dashboard,node_sharepoint toneAmber
class node_adapters,node_database,node_node_repos toneMint
class node_java_api,node_java_service,node_java_persistence,node_file_store toneRose
class node_legacy_migration toneIndigo
```

## Components

### Portal clients

- [Hub portal](https://github.com/cacetius/hub8/blob/main/frontend/hub-react/src/main.jsx): `frontend/hub-react/src/main.jsx`
- [API client](https://github.com/cacetius/hub8/blob/main/frontend/hub-react/src/api.js): `frontend/hub-react/src/api.js`
- [Internal apps](https://github.com/cacetius/hub8/blob/main/frontend/services/hub-client.js): `frontend/services/hub-client.js`

### Node API

- [Express API](https://github.com/cacetius/hub8/blob/main/backend/src/app.js): `backend/src/app.js`
- [API routes](https://github.com/cacetius/hub8/tree/main/backend/src/routes): `backend/src/routes`
- [Authentication and RBAC](https://github.com/cacetius/hub8/tree/main/backend/src/middleware): `backend/src/middleware`
- [App management](https://github.com/cacetius/hub8/blob/main/backend/src/services/AppService.js): `backend/src/services/AppService.js`
- [Factory catalogs](https://github.com/cacetius/hub8/blob/main/backend/src/services/FactoryCatalogService.js): `backend/src/services/FactoryCatalogService.js`
- [User administration](https://github.com/cacetius/hub8/blob/main/backend/src/services/AdminUserService.js): `backend/src/services/AdminUserService.js`
- [Audit queries](https://github.com/cacetius/hub8/blob/main/backend/src/services/AuditService.js): `backend/src/services/AuditService.js`
- [Dashboard](https://github.com/cacetius/hub8/blob/main/backend/src/routes/dashboard.routes.js): `backend/src/routes/dashboard.routes.js`

### Node data layer

- [DB adapters](https://github.com/cacetius/hub8/tree/main/backend/src/adapters): `backend/src/adapters`
- **DB2 / SQL Server**
- [Repositories](https://github.com/cacetius/hub8/tree/main/backend/src/repositories): `backend/src/repositories`

### Java backend

- [Java API controller](https://github.com/cacetius/hub8/blob/main/backend-java/src/main/java/com/hub8/backend/api/HubApiController.java): `backend-java/src/main/java/com/hub8/backend/api/HubApiController.java`
- [Hub service](https://github.com/cacetius/hub8/blob/main/backend-java/src/main/java/com/hub8/backend/service/HubService.java): `backend-java/src/main/java/com/hub8/backend/service/HubService.java`
- [JDBC repositories](https://github.com/cacetius/hub8/tree/main/backend-java/src/main/java/com/hub8/backend/persistence): `backend-java/src/main/java/com/hub8/backend/persistence`
- [File and backup store](https://github.com/cacetius/hub8/blob/main/backend-java/src/main/java/com/hub8/backend/persistence/SharePointFileStore.java): `backend-java/src/main/java/com/hub8/backend/persistence/SharePointFileStore.java`

### Data migration

- [Legacy data import](https://github.com/cacetius/hub8/blob/main/database/seeds/migrate-legacy.js): `database/seeds/migrate-legacy.js`

### Other components

- **Hub user**
- **SharePoint storage**

## Connections

- Hub user → Hub portal: uses
- Hub portal → API client: requests data (evidence: `frontend/hub-react/src/main.jsx`)
- Hub portal → API client: loads catalog (evidence: `frontend/hub-react/src/main.jsx`)
- API client → Express API: calls API
- Internal apps → Express API: uses API
- Express API → API routes: mounts routes (evidence: `backend/src/app.js`)
- Express API → DB adapters: checks readiness (evidence: `backend/src/app.js`)
- API routes → Authentication and RBAC: guards requests (evidence: `backend/src/routes/app.routes.js`)
- API routes → App management: dispatches app actions (evidence: `backend/src/routes/app.routes.js`)
- API routes → Factory catalogs: dispatches catalog actions (evidence: `backend/src/routes/catalog.routes.js`)
- API routes → User administration: dispatches user actions
- API routes → Audit queries: dispatches audit queries
- API routes → Dashboard: routes dashboard
- App management → Repositories: uses repositories
- Factory catalogs → Repositories: uses repositories (evidence: `backend/src/services/FactoryCatalogService.js`)
- User administration → Repositories: uses repositories
- Audit queries → Repositories: uses repository
- Repositories → DB adapters: queries through
- DB adapters → DB2 / SQL Server: connects to
- Legacy data import → DB adapters: imports legacy data (evidence: `database/seeds/migrate-legacy.js`)
- Java API controller → Hub service: delegates requests (evidence: `backend-java/src/main/java/com/hub8/backend/api/HubApiController.java`)
- Hub service → JDBC repositories: uses repositories (evidence: `backend-java/src/main/java/com/hub8/backend/service/HubService.java`)
- Java API controller → File and backup store: uploads and retrieves files (evidence: `backend-java/src/main/java/com/hub8/backend/api/HubApiController.java`)
- File and backup store → SharePoint storage: stores files
