# 3d74r08/pry_crud_inventario architecture

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

- Interactive diagram: https://gitdiagram.com/3d74r08/pry_crud_inventario
- Repository: https://github.com/3d74r08/pry_crud_inventario

## Overview

VaultTI is a role-based IT asset inventory and lifecycle platform. Users sign in to the React application, then manage equipment, assignments, audit history, users, reports, or bulk imports through the API. Bulk imports are queued for an independent worker to process and record in the shared database. The README documents PostgreSQL and asynchronous database polling; several backend and worker links are based on the source index rather than inspected excerpts, so the graph focuses on documented or indexed relationships.

Main entry points: [`frontend/src/App.jsx`](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/App.jsx) (SPA shell), [`frontend/src/api/client.js`](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/api/client.js) (API client), [`backend/src/app.js`](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/app.js) (Express API), [`backend/src/config/db.js`](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/config/db.js) (API database adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["SPA shell<br/>[App.jsx]"]
  node_authui["Sign-in and roles<br/>[AuthContext.jsx]"]
  node_inventoryui["Inventory and assignments<br/>[EquiposList.jsx]"]
  node_assignui["Assignment workflow<br/>[Asignaciones.jsx]"]
  node_importui["Bulk import UI<br/>[CargaMasiva.jsx]"]
  node_adminui["Admin and reports<br/>[UsuariosList.jsx]"]
  node_taskui["Import task status<br/>[TareasWorker.jsx]"]
  node_apiclient["API client<br/>[client.js]"]
end

subgraph group_api["API core"]
  node_apiapp["Express API<br/>[app.js]"]
  node_authroutes["Authentication routes<br/>[authRoutes.js]"]
  node_inventoryroutes["Equipment routes<br/>[equiposRoutes.js]"]
  node_eventroutes["Event routes<br/>[eventosRoutes.js]"]
  node_taskroutes["Task and template routes<br/>[tareasRoutes.js]"]
  node_userroutes["User routes<br/>[usuariosRoutes.js]"]
  node_authcontroller["Authentication logic<br/>[authController.js]"]
  node_inventorycontroller["Asset lifecycle"]
  node_eventcontroller["Audit history"]
  node_taskcontroller["Import task management"]
  node_usercontroller["User management"]
  node_documents["Asset documents"]
  node_lifecycle["Asset history reports"]
end

subgraph group_async["Async imports"]
  node_workerloop["Polling worker<br/>[worker.js]"]
  node_processor["Task processor<br/>[processor.js]"]
  node_excel["Workbook ingestion"]
end

subgraph group_data["Shared data"]
  node_backenddb["API database adapter<br/>[db.js]"]
  node_workerdb["Worker database adapter<br/>[db.js]"]
  node_postgres[("PostgreSQL")]
end

node_user(("Staff user"))

node_user -->|"uses"| node_app
node_app -->|"checks session"| node_authui
node_app -->|"renders"| node_inventoryui
node_app -->|"renders"| node_assignui
node_app -->|"renders"| node_importui
node_app -->|"renders"| node_adminui
node_app -->|"renders"| node_taskui
node_authui -->|"requests profile"| node_apiclient
node_inventoryui -->|"requests inventory"| node_apiclient
node_assignui -->|"requests actions"| node_apiclient
node_importui -->|"submits imports"| node_apiclient
node_adminui -->|"requests users"| node_apiclient
node_taskui -->|"checks tasks"| node_apiclient
node_apiclient -->|"calls API"| node_apiapp
node_apiapp -->|"mounts"| node_authroutes
node_apiapp -->|"mounts"| node_inventoryroutes
node_apiapp -->|"mounts"| node_eventroutes
node_apiapp -->|"mounts"| node_taskroutes
node_apiapp -->|"mounts"| node_userroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_inventoryroutes -->|"dispatches"| node_inventorycontroller
node_eventroutes -->|"dispatches"| node_eventcontroller
node_taskroutes -->|"dispatches"| node_taskcontroller
node_userroutes -->|"dispatches"| node_usercontroller
node_taskroutes -->|"uploads files"| node_taskcontroller
node_inventorycontroller -->|"queries"| node_backenddb
node_eventcontroller -->|"queries"| node_backenddb
node_taskcontroller -->|"manages tasks"| node_backenddb
node_usercontroller -->|"queries"| node_backenddb
node_inventorycontroller -->|"generates handover"| node_documents
node_inventorycontroller -->|"generates history"| node_lifecycle
node_workerloop -->|"polls tasks"| node_workerdb
node_workerloop -->|"dispatches task"| node_processor
node_processor -->|"updates task"| node_workerdb
node_processor -->|"processes workbook"| node_excel
node_excel -->|"writes assets"| node_workerdb
node_backenddb -->|"queries"| node_postgres
node_workerdb -->|"polls and writes"| node_postgres

click node_app "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/App.jsx"
click node_authui "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/context/AuthContext.jsx"
click node_inventoryui "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/EquiposList.jsx"
click node_assignui "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/Asignaciones.jsx"
click node_importui "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/CargaMasiva.jsx"
click node_adminui "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/UsuariosList.jsx"
click node_taskui "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/TareasWorker.jsx"
click node_apiclient "https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/api/client.js"
click node_apiapp "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/app.js"
click node_authroutes "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/authRoutes.js"
click node_inventoryroutes "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/equiposRoutes.js"
click node_eventroutes "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/eventosRoutes.js"
click node_taskroutes "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/tareasRoutes.js"
click node_userroutes "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/usuariosRoutes.js"
click node_authcontroller "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/authController.js"
click node_inventorycontroller "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/equiposController.js"
click node_eventcontroller "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/eventosController.js"
click node_taskcontroller "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/tareasController.js"
click node_usercontroller "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/usuariosController.js"
click node_documents "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/services/actaEntregaService.js"
click node_lifecycle "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/services/hojaDeVidaService.js"
click node_workerloop "https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/worker.js"
click node_processor "https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/processor.js"
click node_excel "https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/ingestExcelWorkbook.js"
click node_backenddb "https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/config/db.js"
click node_workerdb "https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/db.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_authui,node_inventoryui,node_assignui,node_importui,node_adminui,node_taskui,node_apiclient,node_user toneBlue
class node_apiapp,node_authroutes,node_inventoryroutes,node_eventroutes,node_taskroutes,node_userroutes,node_authcontroller,node_inventorycontroller,node_eventcontroller,node_taskcontroller,node_usercontroller,node_documents,node_lifecycle toneAmber
class node_workerloop,node_processor,node_excel toneMint
class node_backenddb,node_workerdb,node_postgres toneRose
```

## Components

### Web application

- [SPA shell](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Sign-in and roles](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [Inventory and assignments](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/EquiposList.jsx): `frontend/src/pages/EquiposList.jsx`
- [Assignment workflow](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/Asignaciones.jsx): `frontend/src/pages/Asignaciones.jsx`
- [Bulk import UI](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/CargaMasiva.jsx): `frontend/src/pages/CargaMasiva.jsx`
- [Admin and reports](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/UsuariosList.jsx): `frontend/src/pages/UsuariosList.jsx`
- [Import task status](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/pages/TareasWorker.jsx): `frontend/src/pages/TareasWorker.jsx`
- [API client](https://github.com/3d74r08/pry_crud_inventario/blob/main/frontend/src/api/client.js): `frontend/src/api/client.js`

### API core

- [Express API](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/app.js): `backend/src/app.js`
- [Authentication routes](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/authRoutes.js): `backend/src/routes/authRoutes.js`
- [Equipment routes](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/equiposRoutes.js): `backend/src/routes/equiposRoutes.js`
- [Event routes](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/eventosRoutes.js): `backend/src/routes/eventosRoutes.js`
- [Task and template routes](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/tareasRoutes.js): `backend/src/routes/tareasRoutes.js`
- [User routes](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/routes/usuariosRoutes.js): `backend/src/routes/usuariosRoutes.js`
- [Authentication logic](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/authController.js): `backend/src/controllers/authController.js`
- [Asset lifecycle](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/equiposController.js): `backend/src/controllers/equiposController.js`
- [Audit history](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/eventosController.js): `backend/src/controllers/eventosController.js`
- [Import task management](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/tareasController.js): `backend/src/controllers/tareasController.js`
- [User management](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/controllers/usuariosController.js): `backend/src/controllers/usuariosController.js`
- [Asset documents](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/services/actaEntregaService.js): `backend/src/services/actaEntregaService.js`
- [Asset history reports](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/services/hojaDeVidaService.js): `backend/src/services/hojaDeVidaService.js`

### Async imports

- [Polling worker](https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/worker.js): `worker/src/worker.js`
- [Task processor](https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/processor.js): `worker/src/processor.js`
- [Workbook ingestion](https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/ingestExcelWorkbook.js): `worker/src/ingestExcelWorkbook.js`

### Shared data

- [API database adapter](https://github.com/3d74r08/pry_crud_inventario/blob/main/backend/src/config/db.js): `backend/src/config/db.js`
- [Worker database adapter](https://github.com/3d74r08/pry_crud_inventario/blob/main/worker/src/db.js): `worker/src/db.js`
- **PostgreSQL**

### Other components

- **Staff user**

## Connections

- Staff user → SPA shell: uses
- SPA shell → Sign-in and roles: checks session (evidence: `frontend/src/App.jsx`)
- SPA shell → Inventory and assignments: renders (evidence: `frontend/src/App.jsx`)
- SPA shell → Assignment workflow: renders (evidence: `frontend/src/App.jsx`)
- SPA shell → Bulk import UI: renders (evidence: `frontend/src/App.jsx`)
- SPA shell → Admin and reports: renders (evidence: `frontend/src/App.jsx`)
- SPA shell → Import task status: renders (evidence: `frontend/src/App.jsx`)
- Sign-in and roles → API client: requests profile (evidence: `frontend/src/context/AuthContext.jsx`)
- Inventory and assignments → API client: requests inventory (evidence: `frontend/src/pages/EquiposList.jsx`)
- Assignment workflow → API client: requests actions (evidence: `frontend/src/pages/Asignaciones.jsx`)
- Bulk import UI → API client: submits imports (evidence: `frontend/src/pages/CargaMasiva.jsx`)
- Admin and reports → API client: requests users (evidence: `frontend/src/pages/UsuariosList.jsx`)
- Import task status → API client: checks tasks (evidence: `frontend/src/pages/TareasWorker.jsx`)
- API client → Express API: calls API (evidence: `frontend/src/api/client.js`)
- Express API → Authentication routes: mounts (evidence: `backend/src/app.js`)
- Express API → Equipment routes: mounts (evidence: `backend/src/app.js`)
- Express API → Event routes: mounts (evidence: `backend/src/app.js`)
- Express API → Task and template routes: mounts (evidence: `backend/src/app.js`)
- Express API → User routes: mounts (evidence: `backend/src/app.js`)
- Authentication routes → Authentication logic: dispatches (evidence: `backend/src/routes/authRoutes.js`)
- Equipment routes → Asset lifecycle: dispatches (evidence: `backend/src/routes/equiposRoutes.js`)
- Event routes → Audit history: dispatches (evidence: `backend/src/routes/eventosRoutes.js`)
- Task and template routes → Import task management: dispatches (evidence: `backend/src/routes/tareasRoutes.js`)
- User routes → User management: dispatches (evidence: `backend/src/routes/usuariosRoutes.js`)
- Task and template routes → Import task management: uploads files (evidence: `backend/src/routes/tareasRoutes.js`)
- Asset lifecycle → API database adapter: queries (evidence: `backend/src/controllers/equiposController.js`)
- Audit history → API database adapter: queries (evidence: `backend/src/controllers/eventosController.js`)
- Import task management → API database adapter: manages tasks (evidence: `backend/src/controllers/tareasController.js`)
- User management → API database adapter: queries (evidence: `backend/src/controllers/usuariosController.js`)
- Asset lifecycle → Asset documents: generates handover (evidence: `backend/src/controllers/equiposController.js`)
- Asset lifecycle → Asset history reports: generates history (evidence: `backend/src/controllers/equiposController.js`)
- Polling worker → Worker database adapter: polls tasks (evidence: `worker/src/worker.js`)
- Polling worker → Task processor: dispatches task (evidence: `worker/src/worker.js`)
- Task processor → Worker database adapter: updates task (evidence: `worker/src/processor.js`)
- Task processor → Workbook ingestion: processes workbook (evidence: `worker/src/processor.js`)
- Workbook ingestion → Worker database adapter: writes assets (evidence: `worker/src/ingestExcelWorkbook.js`)
- API database adapter → PostgreSQL: queries
- Worker database adapter → PostgreSQL: polls and writes
