# nperrinjit/it490-project architecture

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

## Overview

Alcohol Social is a PHP/MySQL cocktail-recipe social application. Its documented request workflow sends web requests through RabbitMQ to a database-side listener, which dispatches operations to domain functions and returns responses. The shown domain code includes authentication and sessions, drink search and recommendations, favorites, reviews, user recipes, blogs, and activity. Separate scripts populate drink and ingredient data from TheCocktailDB. The repository tree contains no webpage implementation, so web behavior and several advertised features are represented only where documented. The graph omits unverified links for unsampled code.

Main entry points: [`tables`](https://github.com/nperrinjit/it490-project/tree/database-prod/tables) (MySQL database), [`scripts/rabbitMQListener.php`](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/rabbitMQListener.php) (Request listener), [`scripts/lib/functions.php`](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/lib/functions.php) (Domain operations), [`scripts/script.php`](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/script.php) (Drink importer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_messaging["Request handling"]
  node_listener["Request listener"]
end

subgraph group_domain["Application domain"]
  node_domain_functions["Domain operations<br/>[functions.php]"]
  node_db_connection["DB connection<br/>[db.php]"]
  node_db_config["DB configuration<br/>[config.php]"]
end

subgraph group_ingest["Recipe data ingestion"]
  node_drink_import["Drink importer<br/>[script.php]"]
  node_ingredient_import["Ingredient importer<br/>[script2.php]"]
  node_drink_ingredients["Drink ingredient linker<br/>[script3.php]"]
end

node_web_user(("Web user"))
node_web_app["Web application"]
node_rabbitmq["RabbitMQ"]
node_mysql[("MySQL database")]
node_cocktaildb["TheCocktailDB"]

node_web_user -->|"uses"| node_web_app
node_web_app -->|"sends requests"| node_rabbitmq
node_rabbitmq -->|"routes requests"| node_listener
node_listener -->|"connects to"| node_rabbitmq
node_listener -->|"dispatches requests"| node_domain_functions
node_domain_functions -->|"gets connection"| node_db_connection
node_db_connection -->|"loads credentials"| node_db_config
node_domain_functions -->|"queries data"| node_mysql
node_drink_import -->|"fetches drinks"| node_cocktaildb
node_drink_import -->|"inserts drinks"| node_mysql
node_ingredient_import -->|"fetches ingredients"| node_cocktaildb
node_ingredient_import -->|"inserts ingredients"| node_mysql
node_drink_ingredients -->|"reads and links"| node_mysql
node_drink_ingredients -->|"fetches drink details"| node_cocktaildb

click node_listener "https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/rabbitMQListener.php"
click node_domain_functions "https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/lib/functions.php"
click node_db_connection "https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/lib/db.php"
click node_db_config "https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/lib/config.php"
click node_mysql "https://github.com/nperrinjit/it490-project/tree/database-prod/tables"
click node_drink_import "https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/script.php"
click node_ingredient_import "https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/script2.php"
click node_drink_ingredients "https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/script3.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_listener,node_web_user toneBlue
class node_domain_functions,node_db_connection,node_db_config,node_mysql toneAmber
class node_drink_import,node_ingredient_import,node_drink_ingredients toneMint
class node_web_app,node_rabbitmq,node_cocktaildb toneIndigo
```

## Components

### Request handling

- [Request listener](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/rabbitMQListener.php): `scripts/rabbitMQListener.php`

### Application domain

- [Domain operations](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/lib/functions.php): `scripts/lib/functions.php`
- [DB connection](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/lib/db.php): `scripts/lib/db.php`
- [DB configuration](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/lib/config.php): `scripts/lib/config.php`

### Recipe data ingestion

- [Drink importer](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/script.php): `scripts/script.php`
- [Ingredient importer](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/script2.php): `scripts/script2.php`
- [Drink ingredient linker](https://github.com/nperrinjit/it490-project/blob/database-prod/scripts/script3.php): `scripts/script3.php`

### Other components

- **Web user**
- **Web application**
- **RabbitMQ**
- [MySQL database](https://github.com/nperrinjit/it490-project/tree/database-prod/tables): `tables`
- **TheCocktailDB**

## Connections

- Web user → Web application: uses (evidence: `README.md`)
- Web application → RabbitMQ: sends requests (evidence: `README.md`)
- RabbitMQ → Request listener: routes requests (evidence: `README.md`)
- Request listener → RabbitMQ: connects to (evidence: `scripts/rabbitMQListener.php`)
- Request listener → Domain operations: dispatches requests (evidence: `scripts/rabbitMQListener.php`)
- Domain operations → DB connection: gets connection (evidence: `scripts/lib/functions.php`)
- DB connection → DB configuration: loads credentials (evidence: `scripts/lib/db.php`)
- Domain operations → MySQL database: queries data (evidence: `scripts/lib/functions.php`)
- Drink importer → TheCocktailDB: fetches drinks (evidence: `scripts/script.php`)
- Drink importer → MySQL database: inserts drinks (evidence: `scripts/script.php`)
- Ingredient importer → TheCocktailDB: fetches ingredients (evidence: `scripts/script2.php`)
- Ingredient importer → MySQL database: inserts ingredients (evidence: `scripts/script2.php`)
- Drink ingredient linker → MySQL database: reads and links (evidence: `scripts/script3.php`)
- Drink ingredient linker → TheCocktailDB: fetches drink details (evidence: `scripts/script3.php`)
