# strusiatgonzalo/tp-integrador-ecommerce-poo2 architecture

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

- Interactive diagram: https://gitdiagram.com/strusiatgonzalo/tp-integrador-ecommerce-poo2
- Repository: https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2

## Overview

This is a framework-free e-commerce domain model, not a deployed web application: the README explicitly says it has no persistence or GUI. Its core workflow is to compose/search catalog items, build and confirm an order, then progress it through fulfillment; payment, shipping, observer notifications, and sales reporting are supporting capabilities. The README documents catalog composition and order-state behavior; other subsystem links reflect sampled source only, so unsampled wiring is left out.

Main entry points: [`src/ecommerce/catalog/lifecycle/Order.java`](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/Order.java) (Order), [`src/ecommerce/catalog/lifecycle/Draft.java`](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/Draft.java) (Draft state), [`src/ecommerce/catalog/CatalogItem.java`](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/CatalogItem.java) (Catalog item), [`src/ecommerce/catalog/reports/ProductSalesReportGenerator.java`](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/ProductSalesReportGenerator.java) (Sales report generator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_catalog["Catalog"]
  node_catalog_item["Catalog item<br/>[CatalogItem.java]"]
  node_product["Product<br/>[Product.java]"]
  node_bundle["Bundle<br/>[Bundle.java]"]
  node_attribute["Dynamic attributes<br/>[Attribute.java]"]
  node_catalog_search["Catalog search<br/>[Catalog.java]"]
  node_criteria["Search criteria"]
  node_criteria_combinators["Criteria combinators<br/>[AndCriteria.java]"]
end

subgraph group_orders["Order lifecycle"]
  node_order["Order<br/>[Order.java]"]
  node_order_item["Order item<br/>[OrderItem.java]"]
  node_order_states["Order states<br/>[State.java]"]
  node_draft["Draft state<br/>[Draft.java]"]
end

subgraph group_fulfillment["Payment and shipping"]
  node_payment_method["Payment workflow<br/>[PaymentMethod.java]"]
  node_payment_adapters["Payment adapters"]
  node_payment_apis["Payment APIs"]
  node_payment_receipt["Payment receipt"]
  node_shipping_types["Shipping methods<br/>[ShippingType.java]"]
  node_shipping_apis["Shipping APIs"]
end

subgraph group_insights["Notifications and reports"]
  node_observers["Order observers<br/>[OrderObserver.java]"]
  node_invoice_generator["Invoice generator"]
  node_invoice["Invoice<br/>[Invoice.java]"]
  node_sales_generator["Sales report generator"]
  node_sales_report["Sales report"]
  node_report_exporters["Report exporters<br/>[CsvExporter.java]"]
  node_report_visitor["Report visitor<br/>[ReportVisitor.java]"]
  node_sales_entry["Sales entries<br/>[SalesEntry.java]"]
end

node_product -->|"implements"| node_catalog_item
node_bundle -->|"implements"| node_catalog_item
node_product -->|"stores"| node_attribute
node_bundle -->|"contains items"| node_catalog_item
node_criteria_combinators -->|"evaluates"| node_criteria
node_order -->|"delegates operations"| node_order_states
node_order_states -->|"specializes"| node_draft
node_draft -->|"adds order items"| node_order
node_order -->|"stores items"| node_order_item
node_order -->|"processes payment"| node_payment_method
node_draft -->|"processes confirmation"| node_payment_method
node_draft -->|"checks and decrements stock"| node_catalog_item
node_payment_method -->|"creates"| node_payment_receipt
node_payment_adapters -->|"calls"| node_payment_apis
node_order -->|"calculates shipping"| node_shipping_types
node_shipping_apis -.-> node_shipping_types
node_order -->|"dispatches notifications"| node_observers
node_invoice_generator -->|"creates on final notice"| node_invoice
node_sales_generator -->|"reads order items"| node_order
node_sales_generator -->|"creates entries"| node_sales_entry
node_sales_generator -->|"returns report"| node_sales_report

click node_catalog_item "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/CatalogItem.java"
click node_product "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/Product.java"
click node_bundle "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/Bundle.java"
click node_attribute "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/Attribute.java"
click node_catalog_search "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/search/Catalog.java"
click node_criteria "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/search/SearchCriteria.java"
click node_criteria_combinators "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/search/AndCriteria.java"
click node_order "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/Order.java"
click node_order_item "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/OrderItem.java"
click node_order_states "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/State.java"
click node_draft "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/Draft.java"
click node_payment_method "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/PaymentMethod.java"
click node_payment_adapters "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/VirtualWalletPayment.java"
click node_payment_apis "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/VirtualWalletAPI.java"
click node_payment_receipt "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/PaymentReceipt.java"
click node_shipping_types "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/shippingmethods/ShippingType.java"
click node_shipping_apis "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/shippingmethods/ExpressShippingAPI.java"
click node_observers "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/notifications/OrderObserver.java"
click node_invoice_generator "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/notifications/InvoiceGenerator.java"
click node_invoice "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/notifications/Invoice.java"
click node_sales_generator "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/ProductSalesReportGenerator.java"
click node_sales_report "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/ProductSalesReport.java"
click node_report_exporters "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/CsvExporter.java"
click node_report_visitor "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/ReportVisitor.java"
click node_sales_entry "https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/SalesEntry.java"

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_catalog_item,node_product,node_bundle,node_attribute,node_catalog_search,node_criteria,node_criteria_combinators toneBlue
class node_order,node_order_item,node_order_states,node_draft toneAmber
class node_payment_method,node_payment_adapters,node_payment_apis,node_payment_receipt,node_shipping_types,node_shipping_apis toneMint
class node_observers,node_invoice_generator,node_invoice,node_sales_generator,node_sales_report,node_report_exporters,node_report_visitor,node_sales_entry toneRose
```

## Components

### Catalog

- [Catalog item](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/CatalogItem.java): `src/ecommerce/catalog/CatalogItem.java`
- [Product](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/Product.java): `src/ecommerce/catalog/Product.java`
- [Bundle](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/Bundle.java): `src/ecommerce/catalog/Bundle.java`
- [Dynamic attributes](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/Attribute.java): `src/ecommerce/catalog/Attribute.java`
- [Catalog search](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/search/Catalog.java): `src/ecommerce/catalog/search/Catalog.java`
- [Search criteria](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/search/SearchCriteria.java): `src/ecommerce/catalog/search/SearchCriteria.java`
- [Criteria combinators](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/search/AndCriteria.java): `src/ecommerce/catalog/search/AndCriteria.java`

### Order lifecycle

- [Order](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/Order.java): `src/ecommerce/catalog/lifecycle/Order.java`
- [Order item](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/OrderItem.java): `src/ecommerce/catalog/lifecycle/OrderItem.java`
- [Order states](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/State.java): `src/ecommerce/catalog/lifecycle/State.java`
- [Draft state](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/Draft.java): `src/ecommerce/catalog/lifecycle/Draft.java`

### Payment and shipping

- [Payment workflow](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/PaymentMethod.java): `src/ecommerce/catalog/lifecycle/paymentmethods/PaymentMethod.java`
- [Payment adapters](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/VirtualWalletPayment.java): `src/ecommerce/catalog/lifecycle/paymentmethods/VirtualWalletPayment.java`
- [Payment APIs](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/VirtualWalletAPI.java): `src/ecommerce/catalog/lifecycle/paymentmethods/VirtualWalletAPI.java`
- [Payment receipt](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/paymentmethods/PaymentReceipt.java): `src/ecommerce/catalog/lifecycle/paymentmethods/PaymentReceipt.java`
- [Shipping methods](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/shippingmethods/ShippingType.java): `src/ecommerce/catalog/lifecycle/shippingmethods/ShippingType.java`
- [Shipping APIs](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/shippingmethods/ExpressShippingAPI.java): `src/ecommerce/catalog/lifecycle/shippingmethods/ExpressShippingAPI.java`

### Notifications and reports

- [Order observers](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/notifications/OrderObserver.java): `src/ecommerce/catalog/lifecycle/notifications/OrderObserver.java`
- [Invoice generator](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/notifications/InvoiceGenerator.java): `src/ecommerce/catalog/lifecycle/notifications/InvoiceGenerator.java`
- [Invoice](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/lifecycle/notifications/Invoice.java): `src/ecommerce/catalog/lifecycle/notifications/Invoice.java`
- [Sales report generator](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/ProductSalesReportGenerator.java): `src/ecommerce/catalog/reports/ProductSalesReportGenerator.java`
- [Sales report](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/ProductSalesReport.java): `src/ecommerce/catalog/reports/ProductSalesReport.java`
- [Report exporters](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/CsvExporter.java): `src/ecommerce/catalog/reports/CsvExporter.java`
- [Report visitor](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/ReportVisitor.java): `src/ecommerce/catalog/reports/ReportVisitor.java`
- [Sales entries](https://github.com/strusiatgonzalo/tp-integrador-ecommerce-poo2/blob/main/src/ecommerce/catalog/reports/SalesEntry.java): `src/ecommerce/catalog/reports/SalesEntry.java`

## Connections

- Product → Catalog item: implements
- Bundle → Catalog item: implements
- Product → Dynamic attributes: stores
- Bundle → Catalog item: contains items
- Criteria combinators → Search criteria: evaluates
- Order → Order states: delegates operations
- Order states → Draft state: specializes
- Draft state → Order: adds order items
- Order → Order item: stores items
- Order → Payment workflow: processes payment
- Draft state → Payment workflow: processes confirmation
- Draft state → Catalog item: checks and decrements stock
- Payment workflow → Payment receipt: creates
- Payment adapters → Payment APIs: calls
- Order → Shipping methods: calculates shipping
- Shipping APIs → Shipping methods
- Order → Order observers: dispatches notifications
- Invoice generator → Invoice: creates on final notice
- Sales report generator → Order: reads order items
- Sales report generator → Sales entries: creates entries
- Sales report generator → Sales report: returns report
