# nicolasfns/marketplace architecture

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

- Interactive diagram: https://gitdiagram.com/nicolasfns/marketplace
- Repository: https://github.com/nicolasfns/marketplace

## Overview

ProjetoWeb is a role-secured electronics marketplace. Buyers browse a product catalog, open product details, manage delivery addresses, and can contact sellers; sellers and admins manage products through a separate panel. Authentication and role checks are shared across these areas, with MySQL-backed users, roles, products, images, and addresses. The README documents role-based product visibility and security controls. Some routes and frontend modules are represented from the tree and README, so uncertain internal wiring is omitted; the sampled detail page shows optional EmailJS contact integration.

Main entry points: [`src/model/conecta.php`](https://github.com/nicolasfns/marketplace/blob/main/src/model/conecta.php) (DB connection), [`public/admin/assets/js/ProductCrud.js`](https://github.com/nicolasfns/marketplace/blob/main/public/admin/assets/js/ProductCrud.js) (Product CRUD UI), [`public/addresses/api/ManageAddresses.php`](https://github.com/nicolasfns/marketplace/blob/main/public/addresses/api/ManageAddresses.php) (Address API), [`src/model/auth.php`](https://github.com/nicolasfns/marketplace/blob/main/src/model/auth.php) (Auth and roles)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Buyer storefront"]
  node_store["Store page<br/>[index.php]"]
  node_store_script["Store scripts<br/>[Script.js]"]
  node_product_module["Product catalog UI<br/>[Product.js]"]
  node_catalog_api["Product feed<br/>[produtos.php]"]
  node_product_detail["Product details<br/>[ProductPage.js]"]
  node_buyer_auth["Buyer session API<br/>[buyerAuth.php]"]
end

subgraph group_management["Product management"]
  node_admin_page["Product panel<br/>[index.php]"]
  node_crud_script["Product CRUD UI<br/>[ProductCrud.js]"]
  node_list_products["List products<br/>[ListarProduto.php]"]
  node_save_product["Save product<br/>[SalvarProduto.php]"]
  node_update_product["Update product"]
  node_delete_product["Delete product<br/>[ExcluirProduto.php]"]
end

subgraph group_identity["Identity and access"]
  node_login["Login page<br/>[login.php]"]
  node_auth["Auth and roles<br/>[auth.php]"]
  node_security["Security controls<br/>[security.php]"]
end

subgraph group_shared["Addresses and persistence"]
  node_addresses_ui["Address interface<br/>[index.html]"]
  node_addresses_api["Address API"]
  node_database[("Marketplace database<br/>[set2.sql]")]
  node_connection["DB connection<br/>[conecta.php]"]
end

node_buyer(("Buyer"))
node_seller(("Seller or admin"))
node_emailjs["EmailJS"]

node_buyer -->|"browses"| node_store
node_store -->|"loads"| node_store_script
node_store -->|"loads"| node_product_module
node_product_module -->|"requests catalog"| node_catalog_api
node_product_module -->|"selects product"| node_product_detail
node_product_detail -->|"checks session"| node_buyer_auth
node_product_detail -->|"loads addresses"| node_addresses_api
node_product_detail -.->|"sends contact"| node_emailjs
node_seller -->|"manages products"| node_admin_page
node_admin_page -->|"checks roles"| node_auth
node_admin_page -->|"creates CSRF token"| node_security
node_admin_page -->|"loads"| node_crud_script
node_crud_script -->|"requests list"| node_list_products
node_crud_script -->|"saves product"| node_save_product
node_crud_script -->|"updates product"| node_update_product
node_crud_script -->|"deletes product"| node_delete_product
node_buyer -->|"signs in"| node_login
node_login -->|"authenticates"| node_auth
node_auth -->|"opens connection"| node_connection
node_addresses_ui -->|"manages addresses"| node_addresses_api
node_addresses_api -->|"checks session"| node_auth
node_addresses_api -->|"checks CSRF"| node_security
node_addresses_api -->|"uses connection"| node_connection
node_catalog_api -->|"uses connection"| node_connection
node_list_products -->|"uses connection"| node_connection
node_save_product -->|"uses connection"| node_connection
node_update_product -->|"uses connection"| node_connection
node_delete_product -->|"uses connection"| node_connection
node_buyer_auth -->|"checks buyer role"| node_auth
node_connection -->|"queries"| node_database

click node_store "https://github.com/nicolasfns/marketplace/blob/main/public/commerce/pages/index.php"
click node_store_script "https://github.com/nicolasfns/marketplace/blob/main/public/commerce/view/Script.js"
click node_product_module "https://github.com/nicolasfns/marketplace/blob/main/public/commerce/view/modules/Product.js"
click node_catalog_api "https://github.com/nicolasfns/marketplace/blob/main/public/commerce/controller/produtos.php"
click node_product_detail "https://github.com/nicolasfns/marketplace/blob/main/public/commerce/view/modules/ProductPage.js"
click node_buyer_auth "https://github.com/nicolasfns/marketplace/blob/main/public/commerce/controller/buyerAuth.php"
click node_admin_page "https://github.com/nicolasfns/marketplace/blob/main/public/admin/pages/index.php"
click node_crud_script "https://github.com/nicolasfns/marketplace/blob/main/public/admin/assets/js/ProductCrud.js"
click node_list_products "https://github.com/nicolasfns/marketplace/blob/main/public/admin/model/ListarProduto.php"
click node_save_product "https://github.com/nicolasfns/marketplace/blob/main/public/admin/controller/SalvarProduto.php"
click node_update_product "https://github.com/nicolasfns/marketplace/blob/main/public/admin/controller/AtualizarProduto.php"
click node_delete_product "https://github.com/nicolasfns/marketplace/blob/main/public/admin/controller/ExcluirProduto.php"
click node_login "https://github.com/nicolasfns/marketplace/blob/main/public/login.php"
click node_auth "https://github.com/nicolasfns/marketplace/blob/main/src/model/auth.php"
click node_security "https://github.com/nicolasfns/marketplace/blob/main/src/model/security.php"
click node_addresses_ui "https://github.com/nicolasfns/marketplace/blob/main/public/addresses/index.html"
click node_addresses_api "https://github.com/nicolasfns/marketplace/blob/main/public/addresses/api/ManageAddresses.php"
click node_database "https://github.com/nicolasfns/marketplace/blob/main/banco/set2.sql"
click node_connection "https://github.com/nicolasfns/marketplace/blob/main/src/model/conecta.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_store,node_store_script,node_product_module,node_catalog_api,node_product_detail,node_buyer_auth toneBlue
class node_admin_page,node_crud_script,node_list_products,node_save_product,node_update_product,node_delete_product toneAmber
class node_login,node_auth,node_security toneMint
class node_addresses_ui,node_addresses_api,node_database,node_connection toneRose
class node_buyer,node_seller,node_emailjs toneIndigo
```

## Components

### Buyer storefront

- [Store page](https://github.com/nicolasfns/marketplace/blob/main/public/commerce/pages/index.php): `public/commerce/pages/index.php`
- [Store scripts](https://github.com/nicolasfns/marketplace/blob/main/public/commerce/view/Script.js): `public/commerce/view/Script.js`
- [Product catalog UI](https://github.com/nicolasfns/marketplace/blob/main/public/commerce/view/modules/Product.js): `public/commerce/view/modules/Product.js`
- [Product feed](https://github.com/nicolasfns/marketplace/blob/main/public/commerce/controller/produtos.php): `public/commerce/controller/produtos.php`
- [Product details](https://github.com/nicolasfns/marketplace/blob/main/public/commerce/view/modules/ProductPage.js): `public/commerce/view/modules/ProductPage.js`
- [Buyer session API](https://github.com/nicolasfns/marketplace/blob/main/public/commerce/controller/buyerAuth.php): `public/commerce/controller/buyerAuth.php`

### Product management

- [Product panel](https://github.com/nicolasfns/marketplace/blob/main/public/admin/pages/index.php): `public/admin/pages/index.php`
- [Product CRUD UI](https://github.com/nicolasfns/marketplace/blob/main/public/admin/assets/js/ProductCrud.js): `public/admin/assets/js/ProductCrud.js`
- [List products](https://github.com/nicolasfns/marketplace/blob/main/public/admin/model/ListarProduto.php): `public/admin/model/ListarProduto.php`
- [Save product](https://github.com/nicolasfns/marketplace/blob/main/public/admin/controller/SalvarProduto.php): `public/admin/controller/SalvarProduto.php`
- [Update product](https://github.com/nicolasfns/marketplace/blob/main/public/admin/controller/AtualizarProduto.php): `public/admin/controller/AtualizarProduto.php`
- [Delete product](https://github.com/nicolasfns/marketplace/blob/main/public/admin/controller/ExcluirProduto.php): `public/admin/controller/ExcluirProduto.php`

### Identity and access

- [Login page](https://github.com/nicolasfns/marketplace/blob/main/public/login.php): `public/login.php`
- [Auth and roles](https://github.com/nicolasfns/marketplace/blob/main/src/model/auth.php): `src/model/auth.php`
- [Security controls](https://github.com/nicolasfns/marketplace/blob/main/src/model/security.php): `src/model/security.php`

### Addresses and persistence

- [Address interface](https://github.com/nicolasfns/marketplace/blob/main/public/addresses/index.html): `public/addresses/index.html`
- [Address API](https://github.com/nicolasfns/marketplace/blob/main/public/addresses/api/ManageAddresses.php): `public/addresses/api/ManageAddresses.php`
- [Marketplace database](https://github.com/nicolasfns/marketplace/blob/main/banco/set2.sql): `banco/set2.sql`
- [DB connection](https://github.com/nicolasfns/marketplace/blob/main/src/model/conecta.php): `src/model/conecta.php`

### Other components

- **Buyer**
- **Seller or admin**
- **EmailJS**

## Connections

- Buyer → Store page: browses
- Store page → Store scripts: loads
- Store page → Product catalog UI: loads
- Product catalog UI → Product feed: requests catalog
- Product catalog UI → Product details: selects product
- Product details → Buyer session API: checks session
- Product details → Address API: loads addresses
- Product details → EmailJS: sends contact
- Seller or admin → Product panel: manages products
- Product panel → Auth and roles: checks roles
- Product panel → Security controls: creates CSRF token
- Product panel → Product CRUD UI: loads
- Product CRUD UI → List products: requests list
- Product CRUD UI → Save product: saves product
- Product CRUD UI → Update product: updates product
- Product CRUD UI → Delete product: deletes product
- Buyer → Login page: signs in
- Login page → Auth and roles: authenticates
- Auth and roles → DB connection: opens connection
- Address interface → Address API: manages addresses
- Address API → Auth and roles: checks session
- Address API → Security controls: checks CSRF
- Address API → DB connection: uses connection
- Product feed → DB connection: uses connection
- List products → DB connection: uses connection
- Save product → DB connection: uses connection
- Update product → DB connection: uses connection
- Delete product → DB connection: uses connection
- Buyer session API → Auth and roles: checks buyer role
- DB connection → Marketplace database: queries
