# subhratanu-saha/take-you-forward-app architecture

> Architecture diagram of the GitHub repository subhratanu-saha/take-you-forward-app, 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/subhratanu-saha/take-you-forward-app
- Repository: https://github.com/subhratanu-saha/take-you-forward-app

## Overview

Take You Forward is an Express-based retail backend. Staff and customer-facing API requests enter the application, pass through route-level validation and authorization where configured, and reach controllers that delegate business operations to services and persistence. Its documented capabilities span customer and order management, loyalty, interaction and subscriber preferences, promotional campaigns with failed-message retrieval/retry, authentication, and audit reporting. The excerpts show the app wiring, selected route/controller/service calls, Prisma usage, and order-email dispatch; unsampled feature internals and some service-to-storage links are represented only where supported by the README or sampled code.

Main entry points: [`src/app.js`](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/app.js) (Express application), [`src/controllers/customerController.js`](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/customerController.js) (Customer controller), [`src/controllers/orderController.js`](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/orderController.js) (Order controller), [`src/controllers/promotionalMessageController.js`](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/promotionalMessageController.js) (Promotional controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_app["Express application<br/>[app.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_authcontroller["Auth controller<br/>[authController.js]"]
  node_authservice["Auth service<br/>[authService.js]"]
  node_access["Auth and RBAC<br/>[index.js]"]
end

subgraph group_retail["Retail operations"]
  node_customerroutes["Customer routes<br/>[customerRoutes.js]"]
  node_customercontroller["Customer controller"]
  node_customerservice["Customer service<br/>[customerService.js]"]
  node_orderroutes["Order routes<br/>[orderRoutes.js]"]
  node_ordercontroller["Order controller<br/>[orderController.js]"]
  node_orderservice["Order service<br/>[orderService.js]"]
  node_orderemail["Order email"]
end

subgraph group_engagement["Engagement and loyalty"]
  node_interactionroutes["Interaction routes"]
  node_interactioncontroller["Interaction controller"]
  node_interactionservice["Interaction service"]
  node_subscriberroutes["Subscriber routes"]
  node_subscribercontroller["Subscriber controller"]
  node_subscriberservice["Subscriber service"]
  node_promoroutes["Promotional routes"]
  node_promocontroller["Promotional controller"]
  node_promoservice["Promotional messaging"]
  node_campaignservice["Campaign dispatch"]
  node_loyaltyroutes["Loyalty routes<br/>[loyaltyRoutes.js]"]
  node_loyaltycontroller["Loyalty controller"]
  node_loyaltyservice["Loyalty service<br/>[loyaltyService.js]"]
  node_eventconsumer["Loyalty event consumer"]
end

subgraph group_platform["Audit and persistence"]
  node_auditroutes["Audit routes<br/>[auditRoutes.js]"]
  node_auditcontroller["Audit controller<br/>[auditController.js]"]
  node_auditservice["Audit service<br/>[auditService.js]"]
  node_store[("Postgres via Prisma<br/>[db.js]")]
  node_auditstore[("Audit Prisma client<br/>[prisma.js]")]
end

node_staff(("Staff and API clients"))

node_staff -->|"sends requests"| node_app
node_app -->|"authenticates requests"| node_access
node_app -->|"mounts routes"| node_authroutes
node_app -->|"mounts routes"| node_customerroutes
node_app -->|"mounts routes"| node_orderroutes
node_app -->|"mounts routes"| node_interactionroutes
node_app -->|"mounts routes"| node_subscriberroutes
node_app -->|"mounts routes"| node_promoroutes
node_app -->|"mounts routes"| node_loyaltyroutes
node_app -->|"mounts routes"| node_auditroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_customerroutes -->|"dispatches"| node_customercontroller
node_orderroutes -->|"dispatches"| node_ordercontroller
node_interactionroutes -->|"dispatches"| node_interactioncontroller
node_subscriberroutes -->|"dispatches"| node_subscribercontroller
node_promoroutes -->|"dispatches"| node_promocontroller
node_loyaltyroutes -->|"dispatches"| node_loyaltycontroller
node_auditroutes -->|"dispatches"| node_auditcontroller
node_authcontroller -->|"calls"| node_authservice
node_customercontroller -->|"calls"| node_customerservice
node_customercontroller -.->|"requests subscriber API"| node_app
node_ordercontroller -->|"calls"| node_orderservice
node_ordercontroller -->|"dispatches email"| node_orderemail
node_interactioncontroller -->|"calls"| node_interactionservice
node_subscribercontroller -->|"calls"| node_subscriberservice
node_promocontroller -->|"calls"| node_promoservice
node_promocontroller -->|"campaign operations"| node_campaignservice
node_loyaltycontroller -->|"calls"| node_loyaltyservice
node_app -->|"subscribes events"| node_eventconsumer
node_auditcontroller -->|"calls"| node_auditservice
node_auditcontroller -->|"queries"| node_auditstore
node_authservice -->|"reads and writes"| node_store
node_auditservice -->|"queries"| node_auditstore

click node_app "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/app.js"
click node_authroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/authRoutes.js"
click node_authcontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/authController.js"
click node_authservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/authService.js"
click node_access "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/middleware/index.js"
click node_customerroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/customerRoutes.js"
click node_customercontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/customerController.js"
click node_customerservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/customerService.js"
click node_orderroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/orderRoutes.js"
click node_ordercontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/orderController.js"
click node_orderservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/orderService.js"
click node_orderemail "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/orderEmailService.js"
click node_interactionroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/interactionRoutes.js"
click node_interactioncontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/interactionController.js"
click node_interactionservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/interactionService.js"
click node_subscriberroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/subscriberRoutes.js"
click node_subscribercontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/subscriberController.js"
click node_subscriberservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/subscriberService.js"
click node_promoroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/promotionalMessageRoutes.js"
click node_promocontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/promotionalMessageController.js"
click node_promoservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/promotionalMessageService.js"
click node_campaignservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/promotionalCampaignService.js"
click node_loyaltyroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/loyaltyRoutes.js"
click node_loyaltycontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/loyaltyController.js"
click node_loyaltyservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/loyaltyService.js"
click node_eventconsumer "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/events/loyaltyEventConsumer.js"
click node_auditroutes "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/auditRoutes.js"
click node_auditcontroller "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/auditController.js"
click node_auditservice "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/auditService.js"
click node_store "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/utils/db.js"
click node_auditstore "https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/db/prisma.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_authroutes,node_authcontroller,node_authservice,node_access,node_staff toneBlue
class node_customerroutes,node_customercontroller,node_customerservice,node_orderroutes,node_ordercontroller,node_orderservice,node_orderemail toneAmber
class node_interactionroutes,node_interactioncontroller,node_interactionservice,node_subscriberroutes,node_subscribercontroller,node_subscriberservice,node_promoroutes,node_promocontroller,node_promoservice,node_campaignservice,node_loyaltyroutes,node_loyaltycontroller,node_loyaltyservice,node_eventconsumer toneMint
class node_auditroutes,node_auditcontroller,node_auditservice,node_store,node_auditstore toneRose
```

## Components

### API and access

- [Express application](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/app.js): `src/app.js`
- [Auth routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/authRoutes.js): `src/routes/authRoutes.js`
- [Auth controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/authController.js): `src/controllers/authController.js`
- [Auth service](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/authService.js): `src/services/authService.js`
- [Auth and RBAC](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/middleware/index.js): `src/middleware/index.js`

### Retail operations

- [Customer routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/customerRoutes.js): `src/routes/customerRoutes.js`
- [Customer controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/customerController.js): `src/controllers/customerController.js`
- [Customer service](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/customerService.js): `src/services/customerService.js`
- [Order routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/orderRoutes.js): `src/routes/orderRoutes.js`
- [Order controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/orderController.js): `src/controllers/orderController.js`
- [Order service](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/orderService.js): `src/services/orderService.js`
- [Order email](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/orderEmailService.js): `src/services/orderEmailService.js`

### Engagement and loyalty

- [Interaction routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/interactionRoutes.js): `src/routes/interactionRoutes.js`
- [Interaction controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/interactionController.js): `src/controllers/interactionController.js`
- [Interaction service](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/interactionService.js): `src/services/interactionService.js`
- [Subscriber routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/subscriberRoutes.js): `src/routes/subscriberRoutes.js`
- [Subscriber controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/subscriberController.js): `src/controllers/subscriberController.js`
- [Subscriber service](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/subscriberService.js): `src/services/subscriberService.js`
- [Promotional routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/promotionalMessageRoutes.js): `src/routes/promotionalMessageRoutes.js`
- [Promotional controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/promotionalMessageController.js): `src/controllers/promotionalMessageController.js`
- [Promotional messaging](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/promotionalMessageService.js): `src/services/promotionalMessageService.js`
- [Campaign dispatch](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/promotionalCampaignService.js): `src/services/promotionalCampaignService.js`
- [Loyalty routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/loyaltyRoutes.js): `src/routes/loyaltyRoutes.js`
- [Loyalty controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/loyaltyController.js): `src/controllers/loyaltyController.js`
- [Loyalty service](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/loyaltyService.js): `src/services/loyaltyService.js`
- [Loyalty event consumer](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/events/loyaltyEventConsumer.js): `src/events/loyaltyEventConsumer.js`

### Audit and persistence

- [Audit routes](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/routes/auditRoutes.js): `src/routes/auditRoutes.js`
- [Audit controller](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/controllers/auditController.js): `src/controllers/auditController.js`
- [Audit service](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/services/auditService.js): `src/services/auditService.js`
- [Postgres via Prisma](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/utils/db.js): `src/utils/db.js`
- [Audit Prisma client](https://github.com/subhratanu-saha/take-you-forward-app/blob/main/src/db/prisma.js): `src/db/prisma.js`

### Other components

- **Staff and API clients**

## Connections

- Staff and API clients → Express application: sends requests
- Express application → Auth and RBAC: authenticates requests
- Express application → Auth routes: mounts routes
- Express application → Customer routes: mounts routes
- Express application → Order routes: mounts routes
- Express application → Interaction routes: mounts routes
- Express application → Subscriber routes: mounts routes
- Express application → Promotional routes: mounts routes
- Express application → Loyalty routes: mounts routes
- Express application → Audit routes: mounts routes
- Auth routes → Auth controller: dispatches
- Customer routes → Customer controller: dispatches
- Order routes → Order controller: dispatches
- Interaction routes → Interaction controller: dispatches
- Subscriber routes → Subscriber controller: dispatches
- Promotional routes → Promotional controller: dispatches
- Loyalty routes → Loyalty controller: dispatches
- Audit routes → Audit controller: dispatches
- Auth controller → Auth service: calls
- Customer controller → Customer service: calls
- Customer controller → Express application: requests subscriber API
- Order controller → Order service: calls
- Order controller → Order email: dispatches email
- Interaction controller → Interaction service: calls
- Subscriber controller → Subscriber service: calls
- Promotional controller → Promotional messaging: calls
- Promotional controller → Campaign dispatch: campaign operations
- Loyalty controller → Loyalty service: calls
- Express application → Loyalty event consumer: subscribes events
- Audit controller → Audit service: calls
- Audit controller → Audit Prisma client: queries
- Auth service → Postgres via Prisma: reads and writes
- Audit service → Audit Prisma client: queries
