# vladimir859/media-asset architecture

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

- Interactive diagram: https://gitdiagram.com/vladimir859/media-asset
- Repository: https://github.com/vladimir859/media-asset

## Overview

This is a web application for tracking multimedia equipment and coordinating its use at events. The main workflow is to create an event, assign available equipment, and mark the event finished so equipment is released; the backend also supports equipment, user, location, authentication, and audit-log operations. The graph connects routes to controllers where the route declarations show dispatch, and controllers to shared services where the source index or excerpts support those calls. Several frontend pages and backend modules are listed in the tree but not sampled, so their internal interactions are omitted.

Main entry points: [`backend/routes/user_routes.js`](https://github.com/vladimir859/media-asset/blob/master/backend/routes/user_routes.js) (API routes), [`backend/db.js`](https://github.com/vladimir859/media-asset/blob/master/backend/db.js) (Database client), [`backend/controllers/auth_controller.js`](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/auth_controller.js) (Authentication), [`backend/controllers/equipment_controller.js`](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/equipment_controller.js) (Equipment management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web interface"]
  node_events_ui["Events interface<br/>[events.js]"]
  node_login_page["Login page<br/>[Login.html]"]
  node_events_page["Events page<br/>[Events.html]"]
  node_users_page["Users page<br/>[Users.html]"]
  node_reports_page["Reports page<br/>[Reports.html]"]
end

subgraph group_api["REST API"]
  node_server["HTTP server<br/>[server.js]"]
  node_routes["API routes<br/>[user_routes.js]"]
end

subgraph group_domain["Domain operations"]
  node_auth["Authentication<br/>[auth_controller.js]"]
  node_equipment["Equipment management"]
  node_events["Event management"]
  node_users["User management<br/>[user_controller.js]"]
  node_locations["Location management"]
  node_audit_query["Audit log queries<br/>[log_controller.js]"]
end

subgraph group_services["Shared services"]
  node_auth_middleware["JWT and roles<br/>[auth.js]"]
  node_audit_writer["Audit writer<br/>[logs.js]"]
  node_database_client["Database client<br/>[db.js]"]
end

node_user(("User"))
node_postgres[("PostgreSQL")]

node_user -->|"uses"| node_events_ui
node_events_ui -->|"requests events"| node_routes
node_server -->|"mounts API"| node_routes
node_routes -->|"dispatches auth"| node_auth
node_routes -->|"dispatches equipment"| node_equipment
node_routes -->|"dispatches events"| node_events
node_routes -->|"dispatches users"| node_users
node_routes -->|"dispatches locations"| node_locations
node_routes -->|"dispatches logs"| node_audit_query
node_routes -->|"guards routes"| node_auth_middleware
node_auth -->|"uses secret"| node_auth_middleware
node_auth -->|"queries users"| node_database_client
node_equipment -->|"queries equipment"| node_database_client
node_events -->|"updates event and equipment"| node_database_client
node_users -->|"queries users"| node_database_client
node_locations -->|"queries locations"| node_database_client
node_audit_query -->|"queries logs"| node_database_client
node_equipment -->|"records actions"| node_audit_writer
node_events -->|"records actions"| node_audit_writer
node_users -->|"records actions"| node_audit_writer
node_database_client -->|"connects"| node_postgres

click node_events_ui "https://github.com/vladimir859/media-asset/blob/master/backend/events.js"
click node_login_page "https://github.com/vladimir859/media-asset/blob/master/components/Login.html"
click node_events_page "https://github.com/vladimir859/media-asset/blob/master/components/Events.html"
click node_users_page "https://github.com/vladimir859/media-asset/blob/master/components/Users.html"
click node_reports_page "https://github.com/vladimir859/media-asset/blob/master/components/Reports.html"
click node_server "https://github.com/vladimir859/media-asset/blob/master/backend/server.js"
click node_routes "https://github.com/vladimir859/media-asset/blob/master/backend/routes/user_routes.js"
click node_auth "https://github.com/vladimir859/media-asset/blob/master/backend/controllers/auth_controller.js"
click node_equipment "https://github.com/vladimir859/media-asset/blob/master/backend/controllers/equipment_controller.js"
click node_events "https://github.com/vladimir859/media-asset/blob/master/backend/controllers/event_controller.js"
click node_users "https://github.com/vladimir859/media-asset/blob/master/backend/controllers/user_controller.js"
click node_locations "https://github.com/vladimir859/media-asset/blob/master/backend/controllers/location_controller.js"
click node_audit_query "https://github.com/vladimir859/media-asset/blob/master/backend/controllers/log_controller.js"
click node_auth_middleware "https://github.com/vladimir859/media-asset/blob/master/backend/middleware/auth.js"
click node_audit_writer "https://github.com/vladimir859/media-asset/blob/master/backend/logs.js"
click node_database_client "https://github.com/vladimir859/media-asset/blob/master/backend/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_events_ui,node_login_page,node_events_page,node_users_page,node_reports_page,node_user toneBlue
class node_server,node_routes,node_postgres toneAmber
class node_auth,node_equipment,node_events,node_users,node_locations,node_audit_query toneMint
class node_auth_middleware,node_audit_writer,node_database_client toneRose
```

## Components

### Web interface

- [Events interface](https://github.com/vladimir859/media-asset/blob/master/backend/events.js): `backend/events.js`
- [Login page](https://github.com/vladimir859/media-asset/blob/master/components/Login.html): `components/Login.html`
- [Events page](https://github.com/vladimir859/media-asset/blob/master/components/Events.html): `components/Events.html`
- [Users page](https://github.com/vladimir859/media-asset/blob/master/components/Users.html): `components/Users.html`
- [Reports page](https://github.com/vladimir859/media-asset/blob/master/components/Reports.html): `components/Reports.html`

### REST API

- [HTTP server](https://github.com/vladimir859/media-asset/blob/master/backend/server.js): `backend/server.js`
- [API routes](https://github.com/vladimir859/media-asset/blob/master/backend/routes/user_routes.js): `backend/routes/user_routes.js`

### Domain operations

- [Authentication](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/auth_controller.js): `backend/controllers/auth_controller.js`
- [Equipment management](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/equipment_controller.js): `backend/controllers/equipment_controller.js`
- [Event management](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/event_controller.js): `backend/controllers/event_controller.js`
- [User management](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/user_controller.js): `backend/controllers/user_controller.js`
- [Location management](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/location_controller.js): `backend/controllers/location_controller.js`
- [Audit log queries](https://github.com/vladimir859/media-asset/blob/master/backend/controllers/log_controller.js): `backend/controllers/log_controller.js`

### Shared services

- [JWT and roles](https://github.com/vladimir859/media-asset/blob/master/backend/middleware/auth.js): `backend/middleware/auth.js`
- [Audit writer](https://github.com/vladimir859/media-asset/blob/master/backend/logs.js): `backend/logs.js`
- [Database client](https://github.com/vladimir859/media-asset/blob/master/backend/db.js): `backend/db.js`

### Other components

- **User**
- **PostgreSQL**

## Connections

- User → Events interface: uses (evidence: `README.md`)
- Events interface → API routes: requests events (evidence: `backend/events.js`)
- HTTP server → API routes: mounts API (evidence: `backend/server.js`)
- API routes → Authentication: dispatches auth (evidence: `backend/routes/user_routes.js`)
- API routes → Equipment management: dispatches equipment (evidence: `backend/routes/user_routes.js`)
- API routes → Event management: dispatches events (evidence: `backend/routes/user_routes.js`)
- API routes → User management: dispatches users (evidence: `backend/routes/user_routes.js`)
- API routes → Location management: dispatches locations (evidence: `backend/routes/user_routes.js`)
- API routes → Audit log queries: dispatches logs (evidence: `backend/routes/user_routes.js`)
- API routes → JWT and roles: guards routes (evidence: `backend/routes/user_routes.js`)
- Authentication → JWT and roles: uses secret (evidence: `backend/controllers/auth_controller.js`)
- Authentication → Database client: queries users (evidence: `backend/controllers/auth_controller.js`)
- Equipment management → Database client: queries equipment (evidence: `backend/controllers/equipment_controller.js`)
- Event management → Database client: updates event and equipment (evidence: `backend/controllers/event_controller.js`)
- User management → Database client: queries users (evidence: `backend/controllers/user_controller.js`)
- Location management → Database client: queries locations (evidence: `backend/controllers/location_controller.js`)
- Audit log queries → Database client: queries logs (evidence: `backend/controllers/log_controller.js`)
- Equipment management → Audit writer: records actions (evidence: `backend/controllers/equipment_controller.js`)
- Event management → Audit writer: records actions (evidence: `backend/controllers/event_controller.js`)
- User management → Audit writer: records actions (evidence: `backend/controllers/user_controller.js`)
- Database client → PostgreSQL: connects (evidence: `backend/db.js`)
