# audionook/it490-002 architecture

> Architecture diagram of the GitHub repository audionook/it490-002, 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/audionook/it490-002
- Repository: https://github.com/audionook/it490-002

## Overview

AudioNook is a PHP platform for keeping a digital music collection and trading physical music formats. The main user path runs from storefront pages through request handling and RabbitMQ to database request dispatch and domain operations. The README also identifies a DMZ listener for API requests, but sampled code does not establish its complete runtime route; that branch is shown with limited, documented or unverified links. The database modules and their shared query layer are represented separately. Several frontend capabilities are documented by the file tree or README but their implementation was not sampled.

Main entry points: [`Database/db_listener.php`](https://github.com/audionook/it490-002/blob/main/Database/db_listener.php) (Database listener), [`Database/lib/db.php`](https://github.com/audionook/it490-002/blob/main/Database/lib/db.php) (SQL access layer), [`RabbitMQ/lib`](https://github.com/audionook/it490-002/tree/main/RabbitMQ/lib) (RabbitMQ broker), [`Frontend/public`](https://github.com/audionook/it490-002/tree/main/Frontend/public) (Storefront pages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_pages["Storefront pages"]
  node_frontend_requests["Frontend requests<br/>[DBRequests.php]"]
  node_dmz_requests["DMZ requests<br/>[DMZRequests.php]"]
end

subgraph group_messaging["Messaging and API"]
  node_broker["RabbitMQ broker"]
  node_db_listener["Database listener<br/>[db_listener.php]"]
  node_dmz_listener["DMZ listener<br/>[dmz_listener.php]"]
  node_dmz_client["DMZ RabbitMQ client<br/>[RabbitMQClient.php]"]
end

subgraph group_domain["Domain services"]
  node_user_auth["Users and sessions<br/>[User.php]"]
  node_jwt_sessions["JWT sessions<br/>[JWTSessions.php]"]
  node_collection["Collection<br/>[Collection.php]"]
  node_marketplace["Marketplace<br/>[Marketplace.php]"]
  node_products["Products<br/>[Products.php]"]
  node_cart["Cart<br/>[Cart.php]"]
  node_orders["Orders<br/>[Orders.php]"]
  node_forums["Forums<br/>[Forums.php]"]
  node_reviews["Reviews<br/>[Reviews.php]"]
end

subgraph group_storage["Persistence"]
  node_db_layer["SQL access layer<br/>[db.php]"]
  node_database[("Application database<br/>[init_db.php]")]
end

node_visitor(("Platform user"))
node_discogs{{"Discogs API"}}

node_visitor -->|"uses"| node_pages
node_pages -->|"requests data"| node_frontend_requests
node_frontend_requests -.->|"sends requests"| node_broker
node_broker -.->|"delivers messages"| node_db_listener
node_db_listener -->|"dispatches"| node_user_auth
node_db_listener -->|"dispatches"| node_jwt_sessions
node_db_listener -->|"dispatches"| node_collection
node_db_listener -->|"dispatches"| node_marketplace
node_db_listener -->|"dispatches"| node_cart
node_db_listener -->|"dispatches"| node_products
node_db_listener -->|"dispatches"| node_forums
node_db_listener -->|"dispatches"| node_reviews
node_dmz_requests -.->|"sends requests"| node_dmz_client
node_dmz_client -.->|"publishes messages"| node_broker
node_broker -.->|"delivers messages"| node_dmz_listener
node_dmz_listener -.->|"requests catalog data"| node_discogs
node_user_auth -->|"queries"| node_db_layer
node_jwt_sessions -->|"queries"| node_db_layer
node_collection -->|"queries"| node_db_layer
node_marketplace -->|"queries"| node_db_layer
node_cart -->|"queries"| node_db_layer
node_products -->|"queries"| node_db_layer
node_forums -->|"queries"| node_db_layer
node_reviews -->|"queries"| node_db_layer
node_db_layer -->|"reads and writes"| node_database

click node_pages "https://github.com/audionook/it490-002/tree/main/Frontend/public"
click node_frontend_requests "https://github.com/audionook/it490-002/blob/main/Frontend/lib/DBRequests.php"
click node_dmz_requests "https://github.com/audionook/it490-002/blob/main/Frontend/lib/DMZRequests.php"
click node_broker "https://github.com/audionook/it490-002/tree/main/RabbitMQ/lib"
click node_db_listener "https://github.com/audionook/it490-002/blob/main/Database/db_listener.php"
click node_dmz_listener "https://github.com/audionook/it490-002/blob/main/DMZ/dmz_listener.php"
click node_dmz_client "https://github.com/audionook/it490-002/blob/main/DMZ/RabbitMQ/RabbitMQClient.php"
click node_user_auth "https://github.com/audionook/it490-002/blob/main/Database/lib/User.php"
click node_jwt_sessions "https://github.com/audionook/it490-002/blob/main/Database/lib/JWTSessions.php"
click node_collection "https://github.com/audionook/it490-002/blob/main/Database/lib/Collection.php"
click node_marketplace "https://github.com/audionook/it490-002/blob/main/Database/lib/Marketplace.php"
click node_products "https://github.com/audionook/it490-002/blob/main/Database/lib/Products.php"
click node_cart "https://github.com/audionook/it490-002/blob/main/Database/lib/Cart.php"
click node_orders "https://github.com/audionook/it490-002/blob/main/Database/lib/Orders.php"
click node_forums "https://github.com/audionook/it490-002/blob/main/Database/lib/Forums.php"
click node_reviews "https://github.com/audionook/it490-002/blob/main/Database/lib/Reviews.php"
click node_db_layer "https://github.com/audionook/it490-002/blob/main/Database/lib/db.php"
click node_database "https://github.com/audionook/it490-002/blob/main/Database/sql/init_db.php"

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_pages,node_frontend_requests,node_dmz_requests,node_visitor toneBlue
class node_broker,node_db_listener,node_dmz_listener,node_dmz_client toneAmber
class node_user_auth,node_jwt_sessions,node_collection,node_marketplace,node_products,node_cart,node_orders,node_forums,node_reviews,node_discogs toneMint
class node_db_layer,node_database toneRose
```

## Components

### Web experience

- [Storefront pages](https://github.com/audionook/it490-002/tree/main/Frontend/public): `Frontend/public`
- [Frontend requests](https://github.com/audionook/it490-002/blob/main/Frontend/lib/DBRequests.php): `Frontend/lib/DBRequests.php`
- [DMZ requests](https://github.com/audionook/it490-002/blob/main/Frontend/lib/DMZRequests.php): `Frontend/lib/DMZRequests.php`

### Messaging and API

- [RabbitMQ broker](https://github.com/audionook/it490-002/tree/main/RabbitMQ/lib): `RabbitMQ/lib`
- [Database listener](https://github.com/audionook/it490-002/blob/main/Database/db_listener.php): `Database/db_listener.php`
- [DMZ listener](https://github.com/audionook/it490-002/blob/main/DMZ/dmz_listener.php): `DMZ/dmz_listener.php`
- [DMZ RabbitMQ client](https://github.com/audionook/it490-002/blob/main/DMZ/RabbitMQ/RabbitMQClient.php): `DMZ/RabbitMQ/RabbitMQClient.php`

### Domain services

- [Users and sessions](https://github.com/audionook/it490-002/blob/main/Database/lib/User.php): `Database/lib/User.php`
- [JWT sessions](https://github.com/audionook/it490-002/blob/main/Database/lib/JWTSessions.php): `Database/lib/JWTSessions.php`
- [Collection](https://github.com/audionook/it490-002/blob/main/Database/lib/Collection.php): `Database/lib/Collection.php`
- [Marketplace](https://github.com/audionook/it490-002/blob/main/Database/lib/Marketplace.php): `Database/lib/Marketplace.php`
- [Products](https://github.com/audionook/it490-002/blob/main/Database/lib/Products.php): `Database/lib/Products.php`
- [Cart](https://github.com/audionook/it490-002/blob/main/Database/lib/Cart.php): `Database/lib/Cart.php`
- [Orders](https://github.com/audionook/it490-002/blob/main/Database/lib/Orders.php): `Database/lib/Orders.php`
- [Forums](https://github.com/audionook/it490-002/blob/main/Database/lib/Forums.php): `Database/lib/Forums.php`
- [Reviews](https://github.com/audionook/it490-002/blob/main/Database/lib/Reviews.php): `Database/lib/Reviews.php`

### Persistence

- [SQL access layer](https://github.com/audionook/it490-002/blob/main/Database/lib/db.php): `Database/lib/db.php`
- [Application database](https://github.com/audionook/it490-002/blob/main/Database/sql/init_db.php): `Database/sql/init_db.php`

### Other components

- **Platform user**
- **Discogs API**

## Connections

- Platform user → Storefront pages: uses
- Storefront pages → Frontend requests: requests data (evidence: `Frontend/public/product_details.php`)
- Frontend requests → RabbitMQ broker: sends requests
- RabbitMQ broker → Database listener: delivers messages (evidence: `Database/db_listener.php`)
- Database listener → Users and sessions: dispatches (evidence: `Database/db_listener.php`)
- Database listener → JWT sessions: dispatches (evidence: `Database/db_listener.php`)
- Database listener → Collection: dispatches (evidence: `Database/db_listener.php`)
- Database listener → Marketplace: dispatches (evidence: `Database/db_listener.php`)
- Database listener → Cart: dispatches (evidence: `Database/db_listener.php`)
- Database listener → Products: dispatches (evidence: `Database/db_listener.php`)
- Database listener → Forums: dispatches (evidence: `Database/db_listener.php`)
- Database listener → Reviews: dispatches (evidence: `Database/db_listener.php`)
- DMZ requests → DMZ RabbitMQ client: sends requests
- DMZ RabbitMQ client → RabbitMQ broker: publishes messages
- RabbitMQ broker → DMZ listener: delivers messages
- DMZ listener → Discogs API: requests catalog data
- Users and sessions → SQL access layer: queries (evidence: `Database/lib/User.php`)
- JWT sessions → SQL access layer: queries (evidence: `Database/lib/JWTSessions.php`)
- Collection → SQL access layer: queries (evidence: `Database/lib/Collection.php`)
- Marketplace → SQL access layer: queries (evidence: `Database/lib/Marketplace.php`)
- Cart → SQL access layer: queries (evidence: `Database/lib/Cart.php`)
- Products → SQL access layer: queries (evidence: `Database/lib/Products.php`)
- Forums → SQL access layer: queries (evidence: `Database/lib/Forums.php`)
- Reviews → SQL access layer: queries (evidence: `Database/lib/Reviews.php`)
- SQL access layer → Application database: reads and writes (evidence: `Database/lib/db.php`)
