Skip to content

Latest commit

Β 

History

History
685 lines (586 loc) Β· 25.5 KB

File metadata and controls

685 lines (586 loc) Β· 25.5 KB

πŸ—οΈ System Architecture - SDN Backend (EVM)

TΓ i liệu mΓ΄ tαΊ£ kiαΊΏn trΓΊc hệ thα»‘ng backend cho Electric Vehicle Dealer Management System.


πŸ“‹ Mα»₯c lα»₯c

  1. Tα»•ng quan kiαΊΏn trΓΊc
  2. Layered Architecture
  3. Component Diagram
  4. Data Flow
  5. Authentication & Authorization Flow
  6. Business Process Flow
  7. Technology Stack
  8. API Structure

🎯 Tα»•ng quan kiαΊΏn trΓΊc

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         CLIENT LAYER                             β”‚
β”‚                    (Next.js Frontend)                            β”‚
β”‚                                                                   β”‚
β”‚  - Dashboard Pages                                               β”‚
β”‚  - CRUD Operations                                               β”‚
β”‚  - Authentication UI                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β”‚ HTTPS/REST API
                        β”‚ (Bearer JWT Token)
                        β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      API GATEWAY LAYER                           β”‚
β”‚                     (Express.js Server)                          β”‚
β”‚                                                                   β”‚
β”‚  - CORS Configuration                                             β”‚
β”‚  - Request Parsing (JSON/URL-encoded)                            β”‚
β”‚  - Error Handling                                                β”‚
β”‚  - Swagger Documentation                                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β”‚ Route Dispatch
                        β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      ROUTING LAYER                               β”‚
β”‚                    (Express Routes)                              β”‚
β”‚                                                                   β”‚
β”‚  /api/auth          /api/vehicles      /api/dealers              β”‚
β”‚  /api/customers     /api/quotes        /api/orders               β”‚
β”‚  /api/payments      /api/inventory     /api/deliveries            β”‚
β”‚  /api/promotions    /api/reports      /api/dashboard             β”‚
β”‚  ... (19 route modules)                                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β”‚ Middleware Chain
                        β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   MIDDLEWARE LAYER                               β”‚
β”‚                                                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚  β”‚  Authentication Middleware (protect)             β”‚            β”‚
β”‚  β”‚  - JWT Token Verification                        β”‚            β”‚
β”‚  β”‚  - User Lookup                                   β”‚            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚                        β”‚                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚
β”‚  β”‚  Authorization Middleware (allowRoles)             β”‚          β”‚
β”‚  β”‚  - Role-based Access Control                      β”‚          β”‚
β”‚  β”‚  - Permission Checking                            β”‚          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β”‚ Business Logic
                        β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    CONTROLLER LAYER                              β”‚
β”‚                   (Business Logic)                                β”‚
β”‚                                                                   β”‚
β”‚  - authController      - vehicleController                        β”‚
β”‚  - orderController     - paymentController                        β”‚
β”‚  - inventoryController - dealerController                         β”‚
β”‚  - quoteController     - customerController                       β”‚
β”‚  ... (20 controller modules)                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β”‚ Data Operations
                        β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      MODEL LAYER                                 β”‚
β”‚                    (Mongoose ODM)                                β”‚
β”‚                                                                   β”‚
β”‚  - User               - Order          - Payment                  β”‚
β”‚  - VehicleVariant     - Quote          - Delivery                 β”‚
β”‚  - Dealer             - Inventory      - Feedback                 β”‚
β”‚  - Customer           - TestDrive      - Promotion                β”‚
β”‚  ... (18 model schemas)                                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β”‚ MongoDB Driver
                        β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      DATABASE LAYER                              β”‚
β”‚                      (MongoDB)                                   β”‚
β”‚                                                                   β”‚
β”‚  Collections:                                                     β”‚
β”‚  - users              - orders          - payments               β”‚
β”‚  - vehiclevariants    - quotes          - deliveries             β”‚
β”‚  - dealers            - inventory       - feedbacks              β”‚
β”‚  - customers          - testdrives      - promotions              β”‚
β”‚  ...                                                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ›οΈ Layered Architecture

graph TB
    subgraph "Presentation Layer"
        FE[Next.js Frontend<br/>SDN-FE]
    end
    
    subgraph "Application Layer"
        EX[Express Server<br/>index.js]
        CORS[CORS Middleware]
        PARSE[Body Parser]
        ERR[Error Handler]
    end
    
    subgraph "Routing Layer"
        ROUTES[Route Modules<br/>19 routes]
    end
    
    subgraph "Middleware Layer"
        AUTH_MW[Auth Middleware<br/>protect]
        ROLE_MW[Role Middleware<br/>allowRoles]
    end
    
    subgraph "Business Logic Layer"
        CTRL[Controllers<br/>20 controllers]
    end
    
    subgraph "Data Access Layer"
        MODELS[Mongoose Models<br/>18 schemas]
    end
    
    subgraph "Data Layer"
        MONGO[(MongoDB<br/>Database)]
    end
    
    subgraph "External Services"
        JWT_UTIL[JWT Utils<br/>Token Generation]
        HASH_UTIL[Hash Utils<br/>bcryptjs]
        SWAGGER[Swagger UI<br/>/api-docs]
    end
    
    FE -->|HTTPS/REST| EX
    EX --> CORS
    CORS --> PARSE
    PARSE --> ROUTES
    ROUTES --> AUTH_MW
    AUTH_MW --> ROLE_MW
    ROLE_MW --> CTRL
    CTRL --> MODELS
    MODELS --> MONGO
    
    CTRL -.->|uses| JWT_UTIL
    CTRL -.->|uses| HASH_UTIL
    EX -.->|serves| SWAGGER
Loading

πŸ”§ Component Diagram

graph LR
    subgraph "Core Components"
        SERVER[Express Server]
        DB[MongoDB Connection]
        SWAGGER_DOC[Swagger Docs]
    end
    
    subgraph "Auth Components"
        AUTH_CTRL[Auth Controller]
        JWT[JWT Service]
        AUTH_MW[Auth Middleware]
    end
    
    subgraph "Business Components"
        VEHICLE[Vehicle Module]
        DEALER[Dealer Module]
        ORDER[Order Module]
        INVENTORY[Inventory Module]
        PAYMENT[Payment Module]
        QUOTE[Quote Module]
        CUSTOMER[Customer Module]
    end
    
    subgraph "Support Components"
        DASHBOARD[Dashboard Module]
        REPORT[Report Module]
        PROMO[Promotion Module]
        DELIVERY[Delivery Module]
        FEEDBACK[Feedback Module]
        TESTDRIVE[Test Drive Module]
    end
    
    SERVER --> DB
    SERVER --> SWAGGER_DOC
    SERVER --> AUTH_MW
    AUTH_MW --> AUTH_CTRL
    AUTH_CTRL --> JWT
    
    SERVER --> VEHICLE
    SERVER --> DEALER
    SERVER --> ORDER
    SERVER --> INVENTORY
    SERVER --> PAYMENT
    SERVER --> QUOTE
    SERVER --> CUSTOMER
    SERVER --> DASHBOARD
    SERVER --> REPORT
    SERVER --> PROMO
    SERVER --> DELIVERY
    SERVER --> FEEDBACK
    SERVER --> TESTDRIVE
Loading

πŸ”„ Data Flow

Request Flow

sequenceDiagram
    participant Client
    participant Express
    participant Routes
    participant AuthMW
    participant RoleMW
    participant Controller
    participant Model
    participant MongoDB
    
    Client->>Express: HTTP Request<br/>(with JWT token)
    Express->>Routes: Route Matching
    Routes->>AuthMW: protect middleware
    AuthMW->>AuthMW: Verify JWT Token
    AuthMW->>Model: Find User by ID
    Model->>MongoDB: Query User
    MongoDB-->>Model: User Data
    Model-->>AuthMW: User Object
    AuthMW->>RoleMW: Check Role Permissions
    RoleMW-->>Controller: Authorized Request
    Controller->>Model: Business Logic Operations
    Model->>MongoDB: Database Operations
    MongoDB-->>Model: Query Results
    Model-->>Controller: Processed Data
    Controller-->>Routes: Response Data
    Routes-->>Express: JSON Response
    Express-->>Client: HTTP Response
Loading

Authentication Flow

sequenceDiagram
    participant Client
    participant AuthController
    participant UserModel
    participant JWTUtils
    participant MongoDB
    
    Client->>AuthController: POST /api/auth/login<br/>{email, password}
    AuthController->>UserModel: Find User by Email
    UserModel->>MongoDB: Query users collection
    MongoDB-->>UserModel: User Document
    UserModel-->>AuthController: User with passwordHash
    
    AuthController->>AuthController: Compare Password<br/>(bcryptjs)
    
    alt Password Valid
        AuthController->>JWTUtils: generateToken(userId, role)
        JWTUtils-->>AuthController: JWT Token
        AuthController->>JWTUtils: generateRefreshToken(userId, role)
        JWTUtils-->>AuthController: Refresh Token
        AuthController-->>Client: 200 OK<br/>{token, refreshToken, user}
    else Password Invalid
        AuthController-->>Client: 401 Unauthorized<br/>{message: "Invalid credentials"}
    end
Loading

πŸ” Authentication & Authorization Flow

graph TD
    START[Client Request] --> CHECK_TOKEN{Has Bearer Token?}
    
    CHECK_TOKEN -->|No| ERR1[401 Unauthorized<br/>No token]
    CHECK_TOKEN -->|Yes| VERIFY[Verify JWT Token]
    
    VERIFY --> VALID{Token Valid?}
    VALID -->|No| ERR2[401 Unauthorized<br/>Token invalid]
    VALID -->|Yes| LOOKUP[Lookup User from DB]
    
    LOOKUP --> USER_EXISTS{User Exists?}
    USER_EXISTS -->|No| ERR3[401 Unauthorized<br/>User not found]
    USER_EXISTS -->|Yes| ATTACH[Attach User to req.user]
    
    ATTACH --> CHECK_ROLE{Has Required Role?}
    CHECK_ROLE -->|No| ERR4[403 Forbidden<br/>Insufficient permissions]
    CHECK_ROLE -->|Yes| SUCCESS[Authorized<br/>Proceed to Controller]
    
    SUCCESS --> DEALER_FILTER{DealerStaff/<br/>DealerManager?}
    DEALER_FILTER -->|Yes| AUTO_FILTER[Auto-filter by<br/>req.user.dealer]
    DEALER_FILTER -->|No| NO_FILTER[No filtering]
    
    AUTO_FILTER --> CONTROLLER[Execute Controller Logic]
    NO_FILTER --> CONTROLLER
Loading

Role Hierarchy & Permissions

Admin
  β”œβ”€β”€ Full System Access
  β”œβ”€β”€ User Management
  β”œβ”€β”€ Dealer Management
  └── All EVM Staff permissions

EVMStaff
  β”œβ”€β”€ Vehicle Management (Model/Variant/Color)
  β”œβ”€β”€ Global Inventory Management
  β”œβ”€β”€ Order Allocation & Approval
  β”œβ”€β”€ Dealer Target Management
  β”œβ”€β”€ Promotion Management
  └── System Reports

DealerManager
  β”œβ”€β”€ Staff Management (within dealer)
  β”œβ”€β”€ Quote Approval
  β”œβ”€β”€ Order Approval
  β”œβ”€β”€ Payment Confirmation
  β”œβ”€β”€ Delivery Status Update
  β”œβ”€β”€ Inventory Management (within dealer)
  β”œβ”€β”€ Customer Management
  └── Dealer Reports

DealerStaff
  β”œβ”€β”€ Vehicle Viewing & Comparison
  β”œβ”€β”€ Customer Management
  β”œβ”€β”€ Quote Creation
  β”œβ”€β”€ Order Creation
  β”œβ”€β”€ Payment Creation
  β”œβ”€β”€ Delivery Creation
  └── Feedback Creation

πŸ“Š Business Process Flow

Sales Flow (Quote β†’ Order β†’ Delivery)

graph LR
    A[Customer Inquiry] --> B[DealerStaff:<br/>Create Quote]
    B --> C{DealerManager<br/>Approves?}
    C -->|No| REJ1[Rejected Quote]
    C -->|Yes| D[Quote Status:<br/>accepted]
    D --> E[Convert Quote<br/>to Order]
    E --> F[Order Status:<br/>new]
    F --> G{DealerManager<br/>Approves?}
    G -->|No| REJ2[Rejected Order]
    G -->|Yes| H[Order Status:<br/>confirmed]
    H --> I[EVMStaff:<br/>Allocate Order]
    I --> J{Inventory<br/>Available?}
    J -->|No| REJ3[Rejected by EVM]
    J -->|Yes| K[Order Status:<br/>allocated]
    K --> L[Inventory Transfer<br/>EVM β†’ Dealer]
    L --> M[Payment Processing]
    M --> N[Order Status:<br/>invoiced]
    N --> O[Delivery Creation]
    O --> P[Order Status:<br/>delivered]
    P --> Q[Contract Generation]
Loading

Inventory Management Flow

graph TD
    A[DealerManager:<br/>Vehicle Request] --> B[Request Status:<br/>pending]
    B --> C{EVMStaff<br/>Review}
    C -->|Check Inventory| D{Enough Stock?}
    D -->|No| REJ[Reject Request]
    D -->|Yes| E[Approve Request]
    E --> F[Reserve Inventory<br/>in EVM Stock]
    F --> G[Transfer Inventory<br/>to Dealer]
    G --> H[Update Dealer Inventory]
    
    I[EVMStaff:<br/>Inventory Transfer] --> J[Select Source Dealer]
    J --> K[Select Target Dealer]
    K --> L[Check Source Stock]
    L --> M[Transfer Vehicles]
    M --> N[Update Both Inventories]
Loading

πŸ› οΈ Technology Stack

Core Technologies

Layer Technology Version Purpose
Runtime Node.js Latest LTS JavaScript runtime
Framework Express.js ^5.1.0 Web application framework
Database MongoDB Latest NoSQL document database
ODM Mongoose ^8.18.3 MongoDB object modeling

Dependencies

Package Version Purpose
express ^5.1.0 Web framework
mongoose ^8.18.3 MongoDB ODM
jsonwebtoken ^9.0.2 JWT authentication
bcryptjs ^3.0.2 Password hashing
cors ^2.8.5 Cross-origin resource sharing
dotenv ^17.2.3 Environment variables
swagger-ui-express ^5.0.1 API documentation
express-async-handler ^1.2.0 Async error handling

πŸ“‘ API Structure

API Endpoints Overview

/api
β”œβ”€β”€ /auth                    Authentication & User Management
β”‚   β”œβ”€β”€ POST   /login        User login
β”‚   β”œβ”€β”€ POST   /register     User registration
β”‚   β”œβ”€β”€ GET    /me           Get current user profile
β”‚   └── POST   /refresh      Refresh JWT token
β”‚
β”œβ”€β”€ /vehicles                Vehicle Variants Management
β”‚   β”œβ”€β”€ GET    /             List all variants
β”‚   β”œβ”€β”€ GET    /:id          Get variant details
β”‚   β”œβ”€β”€ GET    /compare      Compare variants
β”‚   β”œβ”€β”€ POST   /             Create variant (EVMStaff, Admin)
β”‚   β”œβ”€β”€ PUT    /:id          Update variant (EVMStaff, Admin)
β”‚   └── DELETE /:id          Delete variant (Admin)
β”‚
β”œβ”€β”€ /vehicle-models          Vehicle Models Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /vehicle-colors          Vehicle Colors Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /dealers                 Dealer Management
β”‚   β”œβ”€β”€ GET    /             List dealers
β”‚   β”œβ”€β”€ GET    /:id          Get dealer details
β”‚   β”œβ”€β”€ POST   /             Create dealer (Admin)
β”‚   β”œβ”€β”€ PATCH  /:id          Update dealer
β”‚   β”œβ”€β”€ DELETE /:id          Delete dealer (Admin)
β”‚   └── GET    /:id/inventory Get dealer inventory
β”‚
β”œβ”€β”€ /customers               Customer Management (CRM)
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /quotes                  Quote Management
β”‚   β”œβ”€β”€ POST   /             Create quote
β”‚   β”œβ”€β”€ PUT    /:id/approve  Approve quote (DealerManager)
β”‚   β”œβ”€β”€ PUT    /:id/reject   Reject quote (DealerManager)
β”‚   └── PUT    /:id/convert  Convert to order
β”‚
β”œβ”€β”€ /orders                  Order Management
β”‚   β”œβ”€β”€ POST   /             Create order
β”‚   β”œβ”€β”€ PUT    /:id/approve  Approve order (DealerManager)
β”‚   β”œβ”€β”€ PUT    /:id/allocate Allocate order (EVMStaff)
β”‚   β”œβ”€β”€ PUT    /:id/status   Update order status
β”‚   └── [Other operations]
β”‚
β”œβ”€β”€ /payments                Payment Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /inventory               Inventory Management
β”‚   β”œβ”€β”€ GET    /             List inventory
β”‚   β”œβ”€β”€ POST   /             Create inventory item
β”‚   β”œβ”€β”€ POST   /transfer     Transfer between dealers (EVMStaff)
β”‚   └── [Other operations]
β”‚
β”œβ”€β”€ /deliveries              Delivery Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /contracts               Contract Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /promotions              Promotion Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /test-drives             Test Drive Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /feedbacks               Feedback Management
β”‚   └── [CRUD operations]
β”‚
β”œβ”€β”€ /reports                 Reporting
β”‚   β”œβ”€β”€ GET    /sales        Sales report
β”‚   β”œβ”€β”€ GET    /debt         Debt report
β”‚   └── GET    /inventory    Inventory report
β”‚
β”œβ”€β”€ /dashboard               Dashboard Analytics
β”‚   β”œβ”€β”€ GET    /summary      Summary statistics
β”‚   └── GET    /trends       Trend analysis
β”‚
└── /users                   User Management
    └── [CRUD operations]

Request/Response Format

Request Headers:

Authorization: Bearer <jwt_token>
Content-Type: application/json

Success Response:

{
  "success": true,
  "data": { ... }
}

Error Response:

{
  "message": "Error description",
  "error": "Error details (development only)"
}

πŸ“ Project Structure

SDN-BE/
β”œβ”€β”€ index.js                    # Application entry point
β”œβ”€β”€ package.json                # Dependencies & scripts
β”œβ”€β”€ .env                        # Environment variables
β”‚
β”œβ”€β”€ controllers/                # Business logic layer
β”‚   β”œβ”€β”€ authController.js
β”‚   β”œβ”€β”€ vehicleController.js
β”‚   β”œβ”€β”€ orderController.js
β”‚   β”œβ”€β”€ quoteController.js
β”‚   └── ... (20 controllers)
β”‚
β”œβ”€β”€ models/                     # Data models (Mongoose schemas)
β”‚   β”œβ”€β”€ User.js
β”‚   β”œβ”€β”€ VehicleVariant.js
β”‚   β”œβ”€β”€ Order.js
β”‚   β”œβ”€β”€ Quote.js
β”‚   └── ... (18 models)
β”‚
β”œβ”€β”€ routes/                     # API route definitions
β”‚   β”œβ”€β”€ authRoutes.js
β”‚   β”œβ”€β”€ vehicleRoutes.js
β”‚   β”œβ”€β”€ orderRoutes.js
β”‚   └── ... (19 route files)
β”‚
β”œβ”€β”€ middleware/                 # Custom middleware
β”‚   └── authMiddleware.js       # JWT authentication & authorization
β”‚
β”œβ”€β”€ utils/                      # Utility functions
β”‚   β”œβ”€β”€ jwt.js                  # JWT token generation/verification
β”‚   └── hash.js                 # Password hashing utilities
β”‚
β”œβ”€β”€ swagger.json                # API documentation
β”‚
└── seed.js                     # Database seeding script

πŸ”’ Security Architecture

Authentication & Authorization

  1. JWT-based Authentication

    • Token generation with user ID and role
    • Token expiration: 1 day (access), 7 days (refresh)
    • Bearer token in Authorization header
  2. Role-Based Access Control (RBAC)

    • 4 roles: Admin, EVMStaff, DealerManager, DealerStaff
    • Middleware-based permission checking
    • Auto-filtering by dealer for dealer roles
  3. Password Security

    • Bcrypt hashing with salt rounds
    • Passwords never stored in plain text

Data Security

  • Environment variables for sensitive data (JWT_SECRET, MONGO_URI)
  • MongoDB connection with authentication
  • Input validation at controller level
  • Error messages sanitized in production

CORS Configuration

  • Configurable CORS policies
  • Preflight request handling
  • Credential support (configurable)

πŸš€ Deployment Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Production Environment                β”‚
β”‚                                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚  β”‚   Render     β”‚          β”‚   MongoDB    β”‚             β”‚
β”‚  β”‚   (Hosting)  │◄──────────   Atlas      β”‚             β”‚
β”‚  β”‚              β”‚   HTTPS  β”‚   (Cloud DB) β”‚             β”‚
β”‚  β”‚  Express App β”‚          β”‚              β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β”‚         β”‚                                                 β”‚
β”‚         β”‚ HTTPS/REST API                                  β”‚
β”‚         β”‚                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”                                        β”‚
β”‚  β”‚  Next.js FE  β”‚                                        β”‚
β”‚  β”‚  (Client)    β”‚                                        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Environment Configuration

  • Development: Local MongoDB, PORT 5000
  • Production: MongoDB Atlas, Render hosting
  • Health check endpoint for monitoring
  • Graceful shutdown handling

πŸ“ˆ Scalability Considerations

  1. Stateless Design: JWT tokens enable horizontal scaling
  2. MongoDB Sharding: Ready for database scaling
  3. Async Operations: Non-blocking I/O with Express
  4. Connection Pooling: Mongoose connection management
  5. Caching Ready: Can integrate Redis for session/token caching

πŸ“ Notes

  • All endpoints require authentication except /api/auth/login and /api/auth/register
  • DealerStaff and DealerManager automatically filter data by their dealer
  • Error handling is centralized in Express error middleware
  • API documentation available at /api-docs (Swagger UI)
  • Health check endpoint: /health

Last Updated: 2024 Version: 1.0.0