# ghosyy/proyecto-arqui_grieta_del_invocadol architecture

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

- Interactive diagram: https://gitdiagram.com/ghosyy/proyecto-arqui_grieta_del_invocadol
- Repository: https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol

## Overview

This repository implements an ecommerce backend split across a FastAPI broker and NestJS product and order services. The main workflow authenticates a user at the broker, routes requests to domain services, and lets the order service check product prices and stock, request stock deductions, and persist an order with its line items. Other supported capabilities include product catalog and inventory administration, order lookup and cancellation, JWT authentication, and user administration. The services use PostgreSQL; broker proxy destinations and cross-service calls are only partially evidenced by the sampled files.

Main entry points: [`ms-pedidos/src/pedidos/pedidos.service.ts`](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedidos.service.ts) (Order workflow), [`ms-productos/src/productos/productos.controller.ts`](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/productos/productos.controller.ts) (Product endpoints), [`broker/main.py`](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/main.py) (Broker app), [`broker/app/routes/auth.py`](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/routes/auth.py) (Authentication routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_broker["Broker and identity"]
  node_broker_app["Broker app<br/>[main.py]"]
  node_auth_routes["Authentication routes<br/>[auth.py]"]
  node_admin_routes["Admin routes<br/>[admin.py]"]
  node_proxy["Service proxy<br/>[proxy.py]"]
  node_auth_checks["Token checks<br/>[dependencies.py]"]
  node_tokens["JWT tokens<br/>[tokens.py]"]
  node_passwords["Password hashing<br/>[passwords.py]"]
  node_broker_config["Broker settings<br/>[config.py]"]
end

subgraph group_products["Product catalog"]
  node_products_api["Product endpoints"]
  node_products_service["Catalog and stock"]
  node_product_contracts["Product DTOs"]
  node_product_entity["Product entity<br/>[producto.entity.ts]"]
  node_product_db_config["Product DB setup<br/>[app.module.ts]"]
end

subgraph group_orders["Order management"]
  node_orders_api["Order endpoints"]
  node_orders_service["Order workflow<br/>[pedidos.service.ts]"]
  node_order_contracts["Order DTOs"]
  node_order_entity["Order header<br/>[pedido.entity.ts]"]
  node_order_lines["Order lines"]
end

subgraph group_storage["Persistence"]
  node_broker_users[("Broker user data<br/>[db.py]")]
  node_orders_db[("Orders database<br/>[pedido.entity.ts]")]
end

node_client(("API client"))

node_client -->|"sends requests"| node_broker_app
node_broker_app -->|"registers routes"| node_auth_routes
node_broker_app -->|"registers routes"| node_admin_routes
node_broker_app -->|"registers routes"| node_proxy
node_broker_app -->|"initializes users"| node_broker_users
node_auth_routes -->|"looks up users"| node_broker_users
node_auth_routes -->|"verifies passwords"| node_passwords
node_auth_routes -->|"creates tokens"| node_tokens
node_auth_routes -->|"checks identity"| node_auth_checks
node_auth_checks -->|"reads tokens"| node_tokens
node_auth_checks -->|"checks user status"| node_broker_users
node_admin_routes -->|"guards admin routes"| node_auth_checks
node_admin_routes -->|"manages users"| node_broker_users
node_proxy -->|"uses destinations"| node_broker_config
node_proxy -.->|"forwards requests"| node_products_api
node_proxy -.->|"forwards requests"| node_orders_api
node_products_api -->|"dispatches operations"| node_products_service
node_products_api -->|"accepts DTOs"| node_product_contracts
node_products_service -->|"uses entity"| node_product_entity
node_products_service -->|"uses DTOs"| node_product_contracts
node_product_db_config -->|"loads module"| node_products_api
node_orders_api -->|"dispatches operations"| node_orders_service
node_orders_api -->|"accepts DTOs"| node_order_contracts
node_orders_service -->|"checks products"| node_products_api
node_orders_service -->|"requests stock deduction"| node_products_api
node_orders_service -->|"creates and saves"| node_order_entity
node_orders_service -->|"creates details"| node_order_lines
node_orders_service -->|"uses DTOs"| node_order_contracts
node_order_entity -->|"has details"| node_order_lines
node_orders_service -->|"persists orders"| node_orders_db

click node_broker_app "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/main.py"
click node_auth_routes "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/routes/auth.py"
click node_admin_routes "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/routes/admin.py"
click node_proxy "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/routes/proxy.py"
click node_auth_checks "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/dependencies.py"
click node_tokens "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/tokens.py"
click node_passwords "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/passwords.py"
click node_broker_users "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/db.py"
click node_broker_config "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/config.py"
click node_products_api "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/productos/productos.controller.ts"
click node_products_service "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/productos/productos.service.ts"
click node_product_contracts "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/tree/main/ms-productos/src/productos/dto"
click node_product_entity "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/productos/producto.entity.ts"
click node_product_db_config "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/app.module.ts"
click node_orders_api "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedidos.controller.ts"
click node_orders_service "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedidos.service.ts"
click node_order_contracts "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/tree/main/ms-pedidos/src/pedidos/dto"
click node_order_entity "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedido.entity.ts"
click node_order_lines "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/detalle-pedido.entity.ts"
click node_orders_db "https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedido.entity.ts"

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_broker_app,node_auth_routes,node_admin_routes,node_proxy,node_auth_checks,node_tokens,node_passwords,node_broker_config,node_client toneBlue
class node_products_api,node_products_service,node_product_contracts,node_product_entity,node_product_db_config toneAmber
class node_orders_api,node_orders_service,node_order_contracts,node_order_entity,node_order_lines toneMint
class node_broker_users,node_orders_db toneRose
```

## Components

### Broker and identity

- [Broker app](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/main.py): `broker/main.py`
- [Authentication routes](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/routes/auth.py): `broker/app/routes/auth.py`
- [Admin routes](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/routes/admin.py): `broker/app/routes/admin.py`
- [Service proxy](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/routes/proxy.py): `broker/app/routes/proxy.py`
- [Token checks](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/dependencies.py): `broker/app/dependencies.py`
- [JWT tokens](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/tokens.py): `broker/app/tokens.py`
- [Password hashing](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/passwords.py): `broker/app/passwords.py`
- [Broker settings](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/config.py): `broker/app/config.py`

### Product catalog

- [Product endpoints](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/productos/productos.controller.ts): `ms-productos/src/productos/productos.controller.ts`
- [Catalog and stock](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/productos/productos.service.ts): `ms-productos/src/productos/productos.service.ts`
- [Product DTOs](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/tree/main/ms-productos/src/productos/dto): `ms-productos/src/productos/dto`
- [Product entity](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/productos/producto.entity.ts): `ms-productos/src/productos/producto.entity.ts`
- [Product DB setup](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-productos/src/app.module.ts): `ms-productos/src/app.module.ts`

### Order management

- [Order endpoints](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedidos.controller.ts): `ms-pedidos/src/pedidos/pedidos.controller.ts`
- [Order workflow](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedidos.service.ts): `ms-pedidos/src/pedidos/pedidos.service.ts`
- [Order DTOs](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/tree/main/ms-pedidos/src/pedidos/dto): `ms-pedidos/src/pedidos/dto`
- [Order header](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedido.entity.ts): `ms-pedidos/src/pedidos/pedido.entity.ts`
- [Order lines](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/detalle-pedido.entity.ts): `ms-pedidos/src/pedidos/detalle-pedido.entity.ts`

### Persistence

- [Broker user data](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/broker/app/db.py): `broker/app/db.py`
- [Orders database](https://github.com/ghosyy/proyecto-arqui_grieta_del_invocadol/blob/main/ms-pedidos/src/pedidos/pedido.entity.ts): `ms-pedidos/src/pedidos/pedido.entity.ts`

### Other components

- **API client**

## Connections

- API client → Broker app: sends requests (evidence: `broker/main.py`)
- Broker app → Authentication routes: registers routes (evidence: `broker/main.py`)
- Broker app → Admin routes: registers routes (evidence: `broker/main.py`)
- Broker app → Service proxy: registers routes (evidence: `broker/main.py`)
- Broker app → Broker user data: initializes users (evidence: `broker/main.py`)
- Authentication routes → Broker user data: looks up users (evidence: `broker/app/routes/auth.py`)
- Authentication routes → Password hashing: verifies passwords (evidence: `broker/app/routes/auth.py`)
- Authentication routes → JWT tokens: creates tokens (evidence: `broker/app/routes/auth.py`)
- Authentication routes → Token checks: checks identity (evidence: `broker/app/routes/auth.py`)
- Token checks → JWT tokens: reads tokens (evidence: `broker/app/dependencies.py`)
- Token checks → Broker user data: checks user status (evidence: `broker/app/dependencies.py`)
- Admin routes → Token checks: guards admin routes (evidence: `broker/app/routes/admin.py`)
- Admin routes → Broker user data: manages users (evidence: `broker/app/routes/admin.py`)
- Service proxy → Broker settings: uses destinations (evidence: `broker/app/routes/proxy.py`)
- Service proxy → Product endpoints: forwards requests
- Service proxy → Order endpoints: forwards requests
- Product endpoints → Catalog and stock: dispatches operations (evidence: `ms-productos/src/productos/productos.controller.ts`)
- Product endpoints → Product DTOs: accepts DTOs (evidence: `ms-productos/src/productos/productos.controller.ts`)
- Catalog and stock → Product entity: uses entity (evidence: `ms-productos/src/productos/productos.service.ts`)
- Catalog and stock → Product DTOs: uses DTOs (evidence: `ms-productos/src/productos/productos.service.ts`)
- Product DB setup → Product endpoints: loads module (evidence: `ms-productos/src/app.module.ts`)
- Order endpoints → Order workflow: dispatches operations (evidence: `ms-pedidos/src/pedidos/pedidos.controller.ts`)
- Order endpoints → Order DTOs: accepts DTOs (evidence: `ms-pedidos/src/pedidos/pedidos.controller.ts`)
- Order workflow → Product endpoints: checks products (evidence: `ms-pedidos/src/pedidos/pedidos.service.ts`)
- Order workflow → Product endpoints: requests stock deduction (evidence: `ms-pedidos/src/pedidos/pedidos.service.ts`)
- Order workflow → Order header: creates and saves (evidence: `ms-pedidos/src/pedidos/pedidos.service.ts`)
- Order workflow → Order lines: creates details (evidence: `ms-pedidos/src/pedidos/pedidos.service.ts`)
- Order workflow → Order DTOs: uses DTOs (evidence: `ms-pedidos/src/pedidos/pedidos.service.ts`)
- Order header → Order lines: has details (evidence: `ms-pedidos/src/pedidos/pedido.entity.ts`)
- Order workflow → Orders database: persists orders (evidence: `ms-pedidos/src/pedidos/pedidos.service.ts`)
