# shuv1103/car-rental-backend-system architecture

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

- Interactive diagram: https://gitdiagram.com/shuv1103/car-rental-backend-system
- Repository: https://github.com/shuv1103/car-rental-backend-system

## Overview

AutoLease is an Express backend for car rentals. Clients use authenticated APIs to manage users and cars, check availability, rent or return vehicles, and make payments. The booking path includes availability checks, a waitlist for unavailable cars, asynchronous notifications, and payment-backed booking updates. The graph also preserves user authentication, administration, persistence, and documented return-image and notification capabilities. Several latter capabilities are documented but their implementation was not sampled, so those links are shown only where the README supports them.

Main entry points: [`src/models/car.model.js`](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/models/car.model.js) (Car records), [`src/models/user.model.js`](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/models/user.model.js) (User records), [`src/routes/user.routes.js`](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/routes/user.routes.js) (User routes), [`src/services/rental.service.js`](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/rental.service.js) (Rental service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_app["Express app<br/>[app.js]"]
  node_car_routes["Car routes<br/>[car.routes.js]"]
  node_user_routes["User routes<br/>[user.routes.js]"]
  node_payment_routes["Payment routes<br/>[payment.routes.js]"]
  node_auth["JWT middleware"]
  node_roles["Role checks<br/>[auth.roles.js]"]
end

subgraph group_rental["Rental operations"]
  node_car_controller["Car controller<br/>[car.controllers.js]"]
  node_rental_service["Rental service<br/>[rental.service.js]"]
  node_car_repo["Car repository<br/>[car.repo.js]"]
  node_waitlist["Waitlist service"]
  node_worker["Rental worker<br/>[rental.worker.js]"]
  node_email["Email notifications<br/>[user.email.js]"]
  node_return_images["Return inspection"]
end

subgraph group_identity["User accounts"]
  node_user_controller["User controller"]
  node_user_service["User service<br/>[user.service.js]"]
  node_user_repo["User repository<br/>[user.repo.js]"]
end

subgraph group_payments["Payments"]
  node_payment_controller["Payment controller"]
  node_payment_service["Payment service<br/>[payment.service.js]"]
  node_razorpay_config["Razorpay client<br/>[razorpay.js]"]
end

subgraph group_data["Persistence and messaging"]
  node_car_model["Car records<br/>[car.model.js]"]
  node_user_model["User records<br/>[user.model.js]"]
  node_mongodb[("MongoDB")]
  node_redis[("Redis queue store")]
  node_bullmq["BullMQ"]
end

node_client(("Client"))
node_razorpay["Razorpay"]
node_smtp["SMTP email service"]

node_client -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_car_routes
node_app -->|"mounts routes"| node_user_routes
node_app -->|"mounts routes"| node_payment_routes
node_car_routes -->|"checks identity"| node_auth
node_car_routes -->|"checks role"| node_roles
node_car_routes -->|"dispatches"| node_car_controller
node_user_routes -->|"checks identity"| node_auth
node_user_routes -->|"checks role"| node_roles
node_user_routes -->|"dispatches"| node_user_controller
node_user_routes -->|"dispatches logout"| node_user_service
node_payment_routes -->|"dispatches"| node_payment_controller
node_car_controller -->|"delegates rental"| node_rental_service
node_car_controller -->|"delegates car operations"| node_car_repo
node_rental_service -->|"adds waitlist jobs"| node_waitlist
node_rental_service -->|"sends booking email"| node_email
node_rental_service -->|"reads and updates"| node_car_model
node_rental_service -->|"looks up user"| node_user_model
node_waitlist -->|"uses car data"| node_car_model
node_waitlist -->|"uses user data"| node_user_model
node_waitlist -->|"stores waitlist"| node_redis
node_waitlist -->|"queues jobs"| node_bullmq
node_bullmq -.->|"processes jobs"| node_worker
node_email -->|"sends mail"| node_smtp
node_user_controller -->|"delegates account logic"| node_user_service
node_user_controller -->|"delegates user lookup"| node_user_repo
node_user_service -->|"creates and authenticates"| node_user_model
node_user_repo -->|"queries users"| node_user_model
node_auth -->|"loads identity"| node_user_model
node_car_repo -->|"queries car records"| node_car_model
node_car_model -->|"persists records"| node_mongodb
node_user_model -->|"persists records"| node_mongodb
node_payment_controller -->|"delegates payment"| node_payment_service
node_payment_controller -->|"updates booking"| node_car_model
node_payment_service -->|"uses client"| node_razorpay_config
node_razorpay_config -->|"configures integration"| node_razorpay
node_payment_service -->|"creates and verifies"| node_razorpay
node_return_images -.->|"alerts admin"| node_email
node_return_images -.->|"records return images"| node_car_model

click node_app "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/app.js"
click node_car_routes "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/routes/car.routes.js"
click node_user_routes "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/routes/user.routes.js"
click node_payment_routes "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/routes/payment.routes.js"
click node_auth "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/middlewares/auth.middlewares.js"
click node_roles "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/middlewares/auth.roles.js"
click node_car_controller "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/controllers/car.controllers.js"
click node_rental_service "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/rental.service.js"
click node_car_repo "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/repositories/car.repo.js"
click node_waitlist "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/waitList.service.js"
click node_worker "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/rental.worker.js"
click node_email "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/notifications/user.email.js"
click node_return_images "https://github.com/shuv1103/car-rental-backend-system/tree/main/src"
click node_user_controller "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/controllers/user.controllers.js"
click node_user_service "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/user.service.js"
click node_user_repo "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/repositories/user.repo.js"
click node_payment_controller "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/controllers/payment.controllers.js"
click node_payment_service "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/payment.service.js"
click node_razorpay_config "https://github.com/shuv1103/car-rental-backend-system/blob/main/config/razorpay.js"
click node_car_model "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/models/car.model.js"
click node_user_model "https://github.com/shuv1103/car-rental-backend-system/blob/main/src/models/user.model.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_car_routes,node_user_routes,node_payment_routes,node_auth,node_roles,node_client toneBlue
class node_car_controller,node_rental_service,node_car_repo,node_waitlist,node_worker,node_email,node_return_images toneAmber
class node_user_controller,node_user_service,node_user_repo toneMint
class node_payment_controller,node_payment_service,node_razorpay_config toneRose
class node_car_model,node_user_model,node_mongodb,node_redis,node_bullmq,node_razorpay,node_smtp toneIndigo
```

## Components

### API and access

- [Express app](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/app.js): `src/app.js`
- [Car routes](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/routes/car.routes.js): `src/routes/car.routes.js`
- [User routes](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/routes/user.routes.js): `src/routes/user.routes.js`
- [Payment routes](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/routes/payment.routes.js): `src/routes/payment.routes.js`
- [JWT middleware](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/middlewares/auth.middlewares.js): `src/middlewares/auth.middlewares.js`
- [Role checks](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/middlewares/auth.roles.js): `src/middlewares/auth.roles.js`

### Rental operations

- [Car controller](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/controllers/car.controllers.js): `src/controllers/car.controllers.js`
- [Rental service](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/rental.service.js): `src/services/rental.service.js`
- [Car repository](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/repositories/car.repo.js): `src/repositories/car.repo.js`
- [Waitlist service](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/waitList.service.js): `src/services/waitList.service.js`
- [Rental worker](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/rental.worker.js): `src/services/rental.worker.js`
- [Email notifications](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/notifications/user.email.js): `src/notifications/user.email.js`
- [Return inspection](https://github.com/shuv1103/car-rental-backend-system/tree/main/src): `src`

### User accounts

- [User controller](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/controllers/user.controllers.js): `src/controllers/user.controllers.js`
- [User service](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/user.service.js): `src/services/user.service.js`
- [User repository](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/repositories/user.repo.js): `src/repositories/user.repo.js`

### Payments

- [Payment controller](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/controllers/payment.controllers.js): `src/controllers/payment.controllers.js`
- [Payment service](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/services/payment.service.js): `src/services/payment.service.js`
- [Razorpay client](https://github.com/shuv1103/car-rental-backend-system/blob/main/config/razorpay.js): `config/razorpay.js`

### Persistence and messaging

- [Car records](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/models/car.model.js): `src/models/car.model.js`
- [User records](https://github.com/shuv1103/car-rental-backend-system/blob/main/src/models/user.model.js): `src/models/user.model.js`
- **MongoDB**
- **Redis queue store**
- **BullMQ**

### Other components

- **Client**
- **Razorpay**
- **SMTP email service**

## Connections

- Client → Express app: sends requests (evidence: `README.md`)
- Express app → Car routes: mounts routes (evidence: `src/app.js`)
- Express app → User routes: mounts routes (evidence: `src/app.js`)
- Express app → Payment routes: mounts routes (evidence: `src/app.js`)
- Car routes → JWT middleware: checks identity (evidence: `src/routes/car.routes.js`)
- Car routes → Role checks: checks role (evidence: `src/routes/car.routes.js`)
- Car routes → Car controller: dispatches (evidence: `src/routes/car.routes.js`)
- User routes → JWT middleware: checks identity (evidence: `src/routes/user.routes.js`)
- User routes → Role checks: checks role (evidence: `src/routes/user.routes.js`)
- User routes → User controller: dispatches (evidence: `src/routes/user.routes.js`)
- User routes → User service: dispatches logout (evidence: `src/routes/user.routes.js`)
- Payment routes → Payment controller: dispatches (evidence: `src/routes/payment.routes.js`)
- Car controller → Rental service: delegates rental (evidence: `src/controllers/car.controllers.js`)
- Car controller → Car repository: delegates car operations (evidence: `src/controllers/car.controllers.js`)
- Rental service → Waitlist service: adds waitlist jobs (evidence: `src/services/rental.service.js`)
- Rental service → Email notifications: sends booking email (evidence: `src/services/rental.service.js`)
- Rental service → Car records: reads and updates (evidence: `src/services/rental.service.js`)
- Rental service → User records: looks up user (evidence: `src/services/rental.service.js`)
- Waitlist service → Car records: uses car data (evidence: `src/services/waitList.service.js`)
- Waitlist service → User records: uses user data (evidence: `src/services/waitList.service.js`)
- Waitlist service → Redis queue store: stores waitlist (evidence: `README.md`)
- Waitlist service → BullMQ: queues jobs (evidence: `README.md`)
- BullMQ → Rental worker: processes jobs
- Email notifications → SMTP email service: sends mail (evidence: `README.md`)
- User controller → User service: delegates account logic (evidence: `src/controllers/user.controllers.js`)
- User controller → User repository: delegates user lookup (evidence: `src/controllers/user.controllers.js`)
- User service → User records: creates and authenticates (evidence: `src/services/user.service.js`)
- User repository → User records: queries users (evidence: `src/repositories/user.repo.js`)
- JWT middleware → User records: loads identity (evidence: `src/middlewares/auth.middlewares.js`)
- Car repository → Car records: queries car records (evidence: `src/repositories/car.repo.js`)
- Car records → MongoDB: persists records (evidence: `README.md`)
- User records → MongoDB: persists records (evidence: `README.md`)
- Payment controller → Payment service: delegates payment (evidence: `src/controllers/payment.controllers.js`)
- Payment controller → Car records: updates booking (evidence: `src/controllers/payment.controllers.js`)
- Payment service → Razorpay client: uses client (evidence: `src/services/payment.service.js`)
- Razorpay client → Razorpay: configures integration (evidence: `README.md`)
- Payment service → Razorpay: creates and verifies (evidence: `README.md`)
- Return inspection → Email notifications: alerts admin (evidence: `README.md`)
- Return inspection → Car records: records return images (evidence: `README.md`)
