# rainel0421/e-commerce-backend architecture

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

- Interactive diagram: https://gitdiagram.com/rainel0421/e-commerce-backend
- Repository: https://github.com/rainel0421/e-commerce-backend

## Overview

This is an Express e-commerce API: clients browse products and categories, manage carts, authenticate, and place orders; checkout and payment confirmation complete the purchase. Admin routes provide product, category, and order management, while uploads and Stripe webhooks support commerce operations. The sampled code confirms routing through controllers, services, and repositories for products, categories, and authentication, plus the order webhook path. Cart, upload, and several service/repository internals are represented from the tree and route wiring, but their exact internal calls were not sampled.

Main entry points: [`src/app.js`](https://github.com/rainel0421/e-commerce-backend/blob/main/src/app.js) (Express app), [`src/config/database.js`](https://github.com/rainel0421/e-commerce-backend/blob/main/src/config/database.js) (Prisma database), [`src/services/product.service.js`](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/product.service.js) (Product service), [`src/controllers/webhook.controller.js`](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/webhook.controller.js) (Webhook controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API routing"]
  node_app["Express app<br/>[app.js]"]
  node_auth_routes["Auth routes<br/>[auth.routes.js]"]
  node_product_routes["Product routes<br/>[product.routes.js]"]
  node_category_routes["Category routes<br/>[category.routes.js]"]
  node_cart_routes["Cart routes<br/>[cart.routes.js]"]
  node_order_routes["Order routes<br/>[order.routes.js]"]
  node_upload_routes["Upload routes<br/>[upload.routes.js]"]
  node_webhook_routes["Webhook routes<br/>[webhook.routes.js]"]
end

subgraph group_commerce["Catalog and cart"]
  node_product_controller["Product controller"]
  node_product_service["Product service<br/>[product.service.js]"]
  node_category_controller["Category controller"]
  node_category_service["Category service"]
  node_cart_controller["Cart controller<br/>[cart.controller.js]"]
  node_cart_service["Cart service<br/>[cart.service.js]"]
end

subgraph group_identity["Identity and uploads"]
  node_auth_controller["Auth controller<br/>[auth.controller.js]"]
  node_auth_service["Auth service<br/>[auth.service.js]"]
  node_upload_controller["Upload controller"]
  node_upload_service["Upload service<br/>[upload.service.js]"]
end

subgraph group_orders["Orders and payments"]
  node_order_controller["Order controller"]
  node_order_service["Order service<br/>[order.service.js]"]
  node_payment_service["Payment service<br/>[payment.service.js]"]
  node_webhook_controller["Webhook controller"]
end

subgraph group_persistence["Persistence"]
  node_user_repository["User repository<br/>[user.repository.js]"]
  node_product_repository["Product repository"]
  node_category_repository["Category repository"]
  node_order_repository["Order repository"]
  node_database[("Prisma database<br/>[database.js]")]
end

node_client(("Storefront client"))
node_stripe(("Stripe"))
node_cloudinary(("Cloudinary"))

node_client -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_auth_routes
node_app -->|"mounts routes"| node_product_routes
node_app -->|"mounts routes"| node_category_routes
node_app -->|"mounts routes"| node_cart_routes
node_app -->|"mounts routes"| node_order_routes
node_app -->|"mounts routes"| node_upload_routes
node_app -->|"mounts routes"| node_webhook_routes
node_auth_routes -->|"dispatches"| node_auth_controller
node_auth_controller -->|"calls"| node_auth_service
node_auth_service -->|"queries"| node_user_repository
node_product_routes -->|"dispatches"| node_product_controller
node_product_controller -->|"calls"| node_product_service
node_product_service -->|"queries"| node_product_repository
node_product_service -->|"checks category"| node_category_repository
node_category_routes -->|"dispatches"| node_category_controller
node_category_controller -->|"calls"| node_category_service
node_cart_routes -->|"dispatches"| node_cart_controller
node_cart_controller -->|"calls"| node_cart_service
node_order_routes -->|"dispatches"| node_order_controller
node_order_controller -->|"calls"| node_order_service
node_webhook_routes -->|"dispatches"| node_webhook_controller
node_webhook_controller -->|"verifies event"| node_payment_service
node_webhook_controller -->|"marks paid"| node_order_service
node_payment_service -->|"verifies signature"| node_stripe
node_upload_routes -->|"dispatches"| node_upload_controller
node_upload_controller -->|"calls"| node_upload_service
node_upload_service -.->|"uploads media"| node_cloudinary
node_product_repository -->|"reads and writes"| node_database
node_category_repository -->|"reads and writes"| node_database
node_user_repository -->|"reads and writes"| node_database
node_order_repository -->|"reads and writes"| node_database

click node_app "https://github.com/rainel0421/e-commerce-backend/blob/main/src/app.js"
click node_auth_routes "https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/auth.routes.js"
click node_product_routes "https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/product.routes.js"
click node_category_routes "https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/category.routes.js"
click node_cart_routes "https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/cart.routes.js"
click node_order_routes "https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/order.routes.js"
click node_upload_routes "https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/upload.routes.js"
click node_webhook_routes "https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/webhook.routes.js"
click node_auth_controller "https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/auth.controller.js"
click node_auth_service "https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/auth.service.js"
click node_user_repository "https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/user.repository.js"
click node_product_controller "https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/product.controller.js"
click node_product_service "https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/product.service.js"
click node_product_repository "https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/product.repository.js"
click node_category_controller "https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/category.controller.js"
click node_category_service "https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/category.service.js"
click node_category_repository "https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/category.repository.js"
click node_cart_controller "https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/cart.controller.js"
click node_cart_service "https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/cart.service.js"
click node_order_controller "https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/order.controller.js"
click node_order_service "https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/order.service.js"
click node_order_repository "https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/order.repository.js"
click node_payment_service "https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/payment.service.js"
click node_webhook_controller "https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/webhook.controller.js"
click node_upload_controller "https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/upload.controller.js"
click node_upload_service "https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/upload.service.js"
click node_database "https://github.com/rainel0421/e-commerce-backend/blob/main/src/config/database.js"

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_app,node_auth_routes,node_product_routes,node_category_routes,node_cart_routes,node_order_routes,node_upload_routes,node_webhook_routes,node_client toneBlue
class node_product_controller,node_product_service,node_category_controller,node_category_service,node_cart_controller,node_cart_service toneAmber
class node_auth_controller,node_auth_service,node_upload_controller,node_upload_service toneMint
class node_order_controller,node_order_service,node_payment_service,node_webhook_controller toneRose
class node_user_repository,node_product_repository,node_category_repository,node_order_repository,node_database,node_stripe,node_cloudinary toneIndigo
```

## Components

### API routing

- [Express app](https://github.com/rainel0421/e-commerce-backend/blob/main/src/app.js): `src/app.js`
- [Auth routes](https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [Product routes](https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/product.routes.js): `src/routes/product.routes.js`
- [Category routes](https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/category.routes.js): `src/routes/category.routes.js`
- [Cart routes](https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/cart.routes.js): `src/routes/cart.routes.js`
- [Order routes](https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/order.routes.js): `src/routes/order.routes.js`
- [Upload routes](https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/upload.routes.js): `src/routes/upload.routes.js`
- [Webhook routes](https://github.com/rainel0421/e-commerce-backend/blob/main/src/routes/webhook.routes.js): `src/routes/webhook.routes.js`

### Catalog and cart

- [Product controller](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/product.controller.js): `src/controllers/product.controller.js`
- [Product service](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/product.service.js): `src/services/product.service.js`
- [Category controller](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/category.controller.js): `src/controllers/category.controller.js`
- [Category service](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/category.service.js): `src/services/category.service.js`
- [Cart controller](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/cart.controller.js): `src/controllers/cart.controller.js`
- [Cart service](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/cart.service.js): `src/services/cart.service.js`

### Identity and uploads

- [Auth controller](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/auth.controller.js): `src/controllers/auth.controller.js`
- [Auth service](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/auth.service.js): `src/services/auth.service.js`
- [Upload controller](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/upload.controller.js): `src/controllers/upload.controller.js`
- [Upload service](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/upload.service.js): `src/services/upload.service.js`

### Orders and payments

- [Order controller](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/order.controller.js): `src/controllers/order.controller.js`
- [Order service](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/order.service.js): `src/services/order.service.js`
- [Payment service](https://github.com/rainel0421/e-commerce-backend/blob/main/src/services/payment.service.js): `src/services/payment.service.js`
- [Webhook controller](https://github.com/rainel0421/e-commerce-backend/blob/main/src/controllers/webhook.controller.js): `src/controllers/webhook.controller.js`

### Persistence

- [User repository](https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/user.repository.js): `src/repositories/user.repository.js`
- [Product repository](https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/product.repository.js): `src/repositories/product.repository.js`
- [Category repository](https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/category.repository.js): `src/repositories/category.repository.js`
- [Order repository](https://github.com/rainel0421/e-commerce-backend/blob/main/src/repositories/order.repository.js): `src/repositories/order.repository.js`
- [Prisma database](https://github.com/rainel0421/e-commerce-backend/blob/main/src/config/database.js): `src/config/database.js`

### Other components

- **Storefront client**
- **Stripe**
- **Cloudinary**

## Connections

- Storefront client → Express app: sends requests
- Express app → Auth routes: mounts routes
- Express app → Product routes: mounts routes
- Express app → Category routes: mounts routes
- Express app → Cart routes: mounts routes
- Express app → Order routes: mounts routes
- Express app → Upload routes: mounts routes
- Express app → Webhook routes: mounts routes
- Auth routes → Auth controller: dispatches
- Auth controller → Auth service: calls
- Auth service → User repository: queries
- Product routes → Product controller: dispatches
- Product controller → Product service: calls
- Product service → Product repository: queries
- Product service → Category repository: checks category
- Category routes → Category controller: dispatches
- Category controller → Category service: calls
- Cart routes → Cart controller: dispatches
- Cart controller → Cart service: calls
- Order routes → Order controller: dispatches
- Order controller → Order service: calls
- Webhook routes → Webhook controller: dispatches
- Webhook controller → Payment service: verifies event
- Webhook controller → Order service: marks paid
- Payment service → Stripe: verifies signature
- Upload routes → Upload controller: dispatches
- Upload controller → Upload service: calls
- Upload service → Cloudinary: uploads media
- Product repository → Prisma database: reads and writes
- Category repository → Prisma database: reads and writes
- User repository → Prisma database: reads and writes
- Order repository → Prisma database: reads and writes
