# pero4l/idu_group-backend architecture

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

- Interactive diagram: https://gitdiagram.com/pero4l/idu_group-backend
- Repository: https://github.com/pero4l/idu_group-backend

## Overview

RentULO is a property-rental marketplace backend. Users enter through the Express API and access rental listings, shortlet bookings, accounts, and wallet payments; administrators also manage marketplace activity. The graph keeps these domain capabilities distinct and shows shared persistence and notification layers. Relationships are limited to routes and dependencies visible in the supplied excerpts or SOURCE INDEX; several documented-by-name subsystems have unsampled implementations, so their internal flows are not asserted.

Main entry points: [`models/index.js`](https://github.com/pero4l/idu_group-backend/blob/main/models/index.js) (Sequelize data store), [`controllers/shortlet.controller.js`](https://github.com/pero4l/idu_group-backend/blob/main/controllers/shortlet.controller.js) (Shortlet bookings), [`controllers/notification.controller.js`](https://github.com/pero4l/idu_group-backend/blob/main/controllers/notification.controller.js) (Notifications), [`index.js`](https://github.com/pero4l/idu_group-backend/blob/main/index.js) (Express API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API and access"]
  node_api["Express API<br/>[index.js]"]
  node_auth["Authentication"]
  node_rental_routes["Rental routes<br/>[rental.routes.js]"]
  node_shortlet_routes["Shortlet routes<br/>[shortlet.routes.js]"]
  node_admin_routes["Admin routes"]
  node_wallet_routes["Wallet routes<br/>[wallet.routes.js]"]
end

subgraph group_marketplace["Property marketplace"]
  node_rental["Rental listings"]
  node_shortlet["Shortlet bookings"]
  node_progress["Rental progress"]
end

subgraph group_money["Payments and wallet"]
  node_wallet["Wallet operations"]
  node_coupons["Coupons"]
end

subgraph group_accounts["Accounts and support"]
  node_accounts["User accounts"]
  node_support["Support tickets"]
  node_ai_support["AI support"]
  node_chat["Chat and messages<br/>[chat.routes.js]"]
end

subgraph group_shared["Shared services"]
  node_notifications["Notifications"]
  node_database[("Sequelize data store<br/>[index.js]")]
  node_transactions["Transaction handling<br/>[rollback.js]"]
  node_email["Email delivery<br/>[mailer.js]"]
end

node_client(("User or admin"))
node_flutterwave["Flutterwave"]
node_cloudinary["Cloudinary media"]

node_client -->|"sends requests"| node_api
node_api -->|"mounts routes"| node_rental_routes
node_api -->|"mounts routes"| node_shortlet_routes
node_api -->|"mounts routes"| node_admin_routes
node_api -->|"mounts routes"| node_wallet_routes
node_rental_routes -->|"applies auth"| node_auth
node_rental_routes -->|"routes to"| node_rental
node_shortlet_routes -->|"applies auth"| node_auth
node_shortlet_routes -->|"routes to"| node_shortlet
node_admin_routes -->|"applies auth"| node_auth
node_admin_routes -->|"routes to"| node_shortlet
node_admin_routes -->|"routes to"| node_rental
node_wallet_routes -->|"applies auth"| node_auth
node_wallet_routes -->|"routes to"| node_wallet
node_wallet_routes -->|"routes to"| node_coupons
node_rental -->|"reads and writes"| node_database
node_shortlet -->|"reads and writes"| node_database
node_wallet -->|"reads and writes"| node_database
node_coupons -->|"uses models"| node_database
node_accounts -->|"uses models"| node_database
node_support -->|"uses models"| node_database
node_notifications -->|"stores notifications"| node_database
node_notifications -->|"sends email"| node_email
node_wallet -->|"initializes payment"| node_flutterwave
node_rental -->|"uploads media"| node_cloudinary
node_shortlet -->|"uploads media"| node_cloudinary
node_rental -->|"notifies users"| node_notifications
node_shortlet -->|"notifies users"| node_notifications
node_wallet -->|"notifies users"| node_notifications
node_accounts -->|"notifies users"| node_notifications
node_transactions -->|"manages transactions"| node_database
node_shortlet -->|"uses transactions"| node_transactions
node_wallet -->|"uses transactions"| node_transactions
node_coupons -->|"uses transactions"| node_transactions

click node_api "https://github.com/pero4l/idu_group-backend/blob/main/index.js"
click node_auth "https://github.com/pero4l/idu_group-backend/blob/main/middleware/authUserMiddleware.js"
click node_rental_routes "https://github.com/pero4l/idu_group-backend/blob/main/routes/rental.routes.js"
click node_shortlet_routes "https://github.com/pero4l/idu_group-backend/blob/main/routes/shortlet.routes.js"
click node_admin_routes "https://github.com/pero4l/idu_group-backend/blob/main/routes/superAdmin.routes.js"
click node_rental "https://github.com/pero4l/idu_group-backend/blob/main/controllers/rental.controller.js"
click node_shortlet "https://github.com/pero4l/idu_group-backend/blob/main/controllers/shortlet.controller.js"
click node_progress "https://github.com/pero4l/idu_group-backend/blob/main/controllers/progreess.controller.js"
click node_wallet_routes "https://github.com/pero4l/idu_group-backend/blob/main/routes/wallet.routes.js"
click node_wallet "https://github.com/pero4l/idu_group-backend/blob/main/controllers/wallet.controller.js"
click node_coupons "https://github.com/pero4l/idu_group-backend/blob/main/controllers/coupon.controller.js"
click node_accounts "https://github.com/pero4l/idu_group-backend/blob/main/controllers/users.controller.js"
click node_support "https://github.com/pero4l/idu_group-backend/blob/main/controllers/support.controller.js"
click node_ai_support "https://github.com/pero4l/idu_group-backend/blob/main/controllers/aiSupport.controller.js"
click node_chat "https://github.com/pero4l/idu_group-backend/blob/main/routes/chat.routes.js"
click node_notifications "https://github.com/pero4l/idu_group-backend/blob/main/controllers/notification.controller.js"
click node_database "https://github.com/pero4l/idu_group-backend/blob/main/models/index.js"
click node_transactions "https://github.com/pero4l/idu_group-backend/blob/main/utils/rollback.js"
click node_email "https://github.com/pero4l/idu_group-backend/blob/main/utils/mailer.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_api,node_auth,node_rental_routes,node_shortlet_routes,node_admin_routes,node_wallet_routes,node_client toneBlue
class node_rental,node_shortlet,node_progress toneAmber
class node_wallet,node_coupons toneMint
class node_accounts,node_support,node_ai_support,node_chat toneRose
class node_notifications,node_database,node_transactions,node_email,node_flutterwave,node_cloudinary toneIndigo
```

## Components

### API and access

- [Express API](https://github.com/pero4l/idu_group-backend/blob/main/index.js): `index.js`
- [Authentication](https://github.com/pero4l/idu_group-backend/blob/main/middleware/authUserMiddleware.js): `middleware/authUserMiddleware.js`
- [Rental routes](https://github.com/pero4l/idu_group-backend/blob/main/routes/rental.routes.js): `routes/rental.routes.js`
- [Shortlet routes](https://github.com/pero4l/idu_group-backend/blob/main/routes/shortlet.routes.js): `routes/shortlet.routes.js`
- [Admin routes](https://github.com/pero4l/idu_group-backend/blob/main/routes/superAdmin.routes.js): `routes/superAdmin.routes.js`
- [Wallet routes](https://github.com/pero4l/idu_group-backend/blob/main/routes/wallet.routes.js): `routes/wallet.routes.js`

### Property marketplace

- [Rental listings](https://github.com/pero4l/idu_group-backend/blob/main/controllers/rental.controller.js): `controllers/rental.controller.js`
- [Shortlet bookings](https://github.com/pero4l/idu_group-backend/blob/main/controllers/shortlet.controller.js): `controllers/shortlet.controller.js`
- [Rental progress](https://github.com/pero4l/idu_group-backend/blob/main/controllers/progreess.controller.js): `controllers/progreess.controller.js`

### Payments and wallet

- [Wallet operations](https://github.com/pero4l/idu_group-backend/blob/main/controllers/wallet.controller.js): `controllers/wallet.controller.js`
- [Coupons](https://github.com/pero4l/idu_group-backend/blob/main/controllers/coupon.controller.js): `controllers/coupon.controller.js`

### Accounts and support

- [User accounts](https://github.com/pero4l/idu_group-backend/blob/main/controllers/users.controller.js): `controllers/users.controller.js`
- [Support tickets](https://github.com/pero4l/idu_group-backend/blob/main/controllers/support.controller.js): `controllers/support.controller.js`
- [AI support](https://github.com/pero4l/idu_group-backend/blob/main/controllers/aiSupport.controller.js): `controllers/aiSupport.controller.js`
- [Chat and messages](https://github.com/pero4l/idu_group-backend/blob/main/routes/chat.routes.js): `routes/chat.routes.js`

### Shared services

- [Notifications](https://github.com/pero4l/idu_group-backend/blob/main/controllers/notification.controller.js): `controllers/notification.controller.js`
- [Sequelize data store](https://github.com/pero4l/idu_group-backend/blob/main/models/index.js): `models/index.js`
- [Transaction handling](https://github.com/pero4l/idu_group-backend/blob/main/utils/rollback.js): `utils/rollback.js`
- [Email delivery](https://github.com/pero4l/idu_group-backend/blob/main/utils/mailer.js): `utils/mailer.js`

### Other components

- **User or admin**
- **Flutterwave**
- **Cloudinary media**

## Connections

- User or admin → Express API: sends requests (evidence: `index.js`)
- Express API → Rental routes: mounts routes (evidence: `index.js`)
- Express API → Shortlet routes: mounts routes (evidence: `index.js`)
- Express API → Admin routes: mounts routes (evidence: `index.js`)
- Express API → Wallet routes: mounts routes (evidence: `index.js`)
- Rental routes → Authentication: applies auth (evidence: `routes/rental.routes.js`)
- Rental routes → Rental listings: routes to (evidence: `routes/rental.routes.js`)
- Shortlet routes → Authentication: applies auth (evidence: `routes/shortlet.routes.js`)
- Shortlet routes → Shortlet bookings: routes to (evidence: `routes/shortlet.routes.js`)
- Admin routes → Authentication: applies auth (evidence: `routes/superAdmin.routes.js`)
- Admin routes → Shortlet bookings: routes to (evidence: `routes/superAdmin.routes.js`)
- Admin routes → Rental listings: routes to (evidence: `routes/superAdmin.routes.js`)
- Wallet routes → Authentication: applies auth (evidence: `routes/wallet.routes.js`)
- Wallet routes → Wallet operations: routes to (evidence: `routes/wallet.routes.js`)
- Wallet routes → Coupons: routes to (evidence: `routes/wallet.routes.js`)
- Rental listings → Sequelize data store: reads and writes (evidence: `controllers/rental.controller.js`)
- Shortlet bookings → Sequelize data store: reads and writes (evidence: `controllers/shortlet.controller.js`)
- Wallet operations → Sequelize data store: reads and writes (evidence: `controllers/wallet.controller.js`)
- Coupons → Sequelize data store: uses models (evidence: `controllers/coupon.controller.js`)
- User accounts → Sequelize data store: uses models (evidence: `controllers/users.controller.js`)
- Support tickets → Sequelize data store: uses models (evidence: `controllers/support.controller.js`)
- Notifications → Sequelize data store: stores notifications (evidence: `controllers/notification.controller.js`)
- Notifications → Email delivery: sends email (evidence: `controllers/notification.controller.js`)
- Wallet operations → Flutterwave: initializes payment (evidence: `controllers/wallet.controller.js`)
- Rental listings → Cloudinary media: uploads media (evidence: `controllers/rental.controller.js`)
- Shortlet bookings → Cloudinary media: uploads media (evidence: `controllers/shortlet.controller.js`)
- Rental listings → Notifications: notifies users (evidence: `controllers/rental.controller.js`)
- Shortlet bookings → Notifications: notifies users (evidence: `controllers/shortlet.controller.js`)
- Wallet operations → Notifications: notifies users (evidence: `controllers/wallet.controller.js`)
- User accounts → Notifications: notifies users (evidence: `controllers/users.controller.js`)
- Transaction handling → Sequelize data store: manages transactions (evidence: `utils/rollback.js`)
- Shortlet bookings → Transaction handling: uses transactions (evidence: `controllers/shortlet.controller.js`)
- Wallet operations → Transaction handling: uses transactions (evidence: `controllers/wallet.controller.js`)
- Coupons → Transaction handling: uses transactions (evidence: `controllers/coupon.controller.js`)
