# prem-neupane/floci-emulator-learning-material architecture

> Architecture diagram of the GitHub repository prem-neupane/floci-emulator-learning-material, 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/prem-neupane/floci-emulator-learning-material
- Repository: https://github.com/prem-neupane/floci-emulator-learning-material

## Overview

The repository contains a sequence of FlociCart learning projects; the final project is a storefront for managing products and orders, with asynchronous order processing and a visible processing-status pipeline. The principal workflow is storefront → API → order storage and queue → workers → event fan-out. The final storefront also supports product and order CRUD, cached product listings, and pipeline polling. Some server-side wiring is represented by module names and documented behavior rather than sampled handler code, so uncertain internal calls are omitted.

Main entry points: [`ep-11-complete-project/ep-11-complete-project/project/functions/api/index.mjs`](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/api/index.mjs) (API handler), [`ep-11-complete-project/ep-11-complete-project/project/app/public/app.js`](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/app/public/app.js) (Web storefront), [`ep-11-complete-project/ep-11-complete-project/project/src/services/productsCached.mjs`](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/services/productsCached.mjs) (Cached products), [`ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs`](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs) (Order topic)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront"]
  node_web_app["Web storefront<br/>[app.js]"]
  node_static_host["Static site hosting<br/>[resources.mjs]"]
end

subgraph group_api_data["API and data"]
  node_api_gateway["HTTP API"]
  node_api_handler["API handler<br/>[index.mjs]"]
  node_product_service["Cached products<br/>[productsCached.mjs]"]
  node_redis[("Product cache<br/>[redis.mjs]")]
  node_catalog_repo["Catalog repository<br/>[catalogDdb.mjs]"]
  node_catalog_db[("Catalog table<br/>[resources.mjs]")]
  node_orders_repo["Orders repository<br/>[ordersPg.mjs]"]
  node_orders_db[("Orders database")]
end

subgraph group_async_orders["Async orders"]
  node_queue_module["Orders queue<br/>[ordersQueue.mjs]"]
  node_sqs["Order queue<br/>[resources.mjs]"]
  node_orders_worker["Orders worker<br/>[index.mjs]"]
  node_event_module["Order events<br/>[orderEvents.mjs]"]
  node_sns["Order topic<br/>[resources.mjs]"]
  node_notifications["Notifications worker<br/>[index.mjs]"]
  node_analytics["Analytics worker<br/>[index.mjs]"]
end

subgraph group_telemetry["Order pipeline"]
  node_pipeline_repo["Pipeline tracking<br/>[orderPipeline.mjs]"]
  node_pipeline_table[("Pipeline table<br/>[resources.mjs]")]
end

node_shopper(("Storefront user"))

node_shopper -->|"uses"| node_web_app
node_web_app -->|"loads from"| node_static_host
node_web_app -->|"sends requests"| node_api_gateway
node_api_gateway -->|"dispatches"| node_api_handler
node_web_app -->|"polls pipeline"| node_api_gateway
node_api_handler -->|"serves products"| node_product_service
node_product_service -->|"reads and writes"| node_redis
node_product_service -->|"loads products"| node_catalog_repo
node_catalog_repo -->|"reads and writes"| node_catalog_db
node_api_handler -->|"manages orders"| node_orders_repo
node_orders_repo -->|"reads and writes"| node_orders_db
node_api_handler -->|"enqueues orders"| node_queue_module
node_queue_module -->|"sends jobs"| node_sqs
node_orders_worker -->|"consumes jobs"| node_sqs
node_orders_worker -->|"publishes event"| node_event_module
node_event_module -->|"publishes"| node_sns
node_sns -->|"dispatches events"| node_notifications
node_sns -->|"dispatches events"| node_analytics
node_web_app -->|"requests stages"| node_api_handler
node_api_handler -->|"reads status"| node_pipeline_repo
node_pipeline_repo -->|"reads and writes"| node_pipeline_table

click node_web_app "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/app/public/app.js"
click node_static_host "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs"
click node_api_handler "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/api/index.mjs"
click node_product_service "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/services/productsCached.mjs"
click node_redis "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/cache/redis.mjs"
click node_catalog_repo "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/repositories/catalogDdb.mjs"
click node_catalog_db "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs"
click node_orders_repo "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/repositories/ordersPg.mjs"
click node_queue_module "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/queues/ordersQueue.mjs"
click node_sqs "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs"
click node_orders_worker "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/ordersWorker/index.mjs"
click node_event_module "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/events/orderEvents.mjs"
click node_sns "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs"
click node_notifications "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/notificationsWorker/index.mjs"
click node_analytics "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/analyticsWorker/index.mjs"
click node_pipeline_repo "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/repositories/orderPipeline.mjs"
click node_pipeline_table "https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs"

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_web_app,node_static_host,node_shopper toneBlue
class node_api_gateway,node_api_handler,node_product_service,node_redis,node_catalog_repo,node_catalog_db,node_orders_repo,node_orders_db toneAmber
class node_queue_module,node_sqs,node_orders_worker,node_event_module,node_sns,node_notifications,node_analytics toneMint
class node_pipeline_repo,node_pipeline_table toneRose
```

## Components

### Storefront

- [Web storefront](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/app/public/app.js): `ep-11-complete-project/ep-11-complete-project/project/app/public/app.js`
- [Static site hosting](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs`

### API and data

- **HTTP API**
- [API handler](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/api/index.mjs): `ep-11-complete-project/ep-11-complete-project/project/functions/api/index.mjs`
- [Cached products](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/services/productsCached.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/services/productsCached.mjs`
- [Product cache](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/cache/redis.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/cache/redis.mjs`
- [Catalog repository](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/repositories/catalogDdb.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/repositories/catalogDdb.mjs`
- [Catalog table](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs`
- [Orders repository](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/repositories/ordersPg.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/repositories/ordersPg.mjs`
- **Orders database**

### Async orders

- [Orders queue](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/queues/ordersQueue.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/queues/ordersQueue.mjs`
- [Order queue](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs`
- [Orders worker](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/ordersWorker/index.mjs): `ep-11-complete-project/ep-11-complete-project/project/functions/ordersWorker/index.mjs`
- [Order events](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/events/orderEvents.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/events/orderEvents.mjs`
- [Order topic](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs`
- [Notifications worker](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/notificationsWorker/index.mjs): `ep-11-complete-project/ep-11-complete-project/project/functions/notificationsWorker/index.mjs`
- [Analytics worker](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/functions/analyticsWorker/index.mjs): `ep-11-complete-project/ep-11-complete-project/project/functions/analyticsWorker/index.mjs`

### Order pipeline

- [Pipeline tracking](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/repositories/orderPipeline.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/repositories/orderPipeline.mjs`
- [Pipeline table](https://github.com/prem-neupane/floci-emulator-learning-material/blob/master/ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs): `ep-11-complete-project/ep-11-complete-project/project/src/config/resources.mjs`

### Other components

- **Storefront user**

## Connections

- Storefront user → Web storefront: uses
- Web storefront → Static site hosting: loads from
- Web storefront → HTTP API: sends requests
- HTTP API → API handler: dispatches
- Web storefront → HTTP API: polls pipeline
- API handler → Cached products: serves products
- Cached products → Product cache: reads and writes
- Cached products → Catalog repository: loads products
- Catalog repository → Catalog table: reads and writes
- API handler → Orders repository: manages orders
- Orders repository → Orders database: reads and writes
- API handler → Orders queue: enqueues orders
- Orders queue → Order queue: sends jobs
- Orders worker → Order queue: consumes jobs
- Orders worker → Order events: publishes event
- Order events → Order topic: publishes
- Order topic → Notifications worker: dispatches events
- Order topic → Analytics worker: dispatches events
- Web storefront → API handler: requests stages
- API handler → Pipeline tracking: reads status
- Pipeline tracking → Pipeline table: reads and writes
