# himanshumishra-03/university-procurement-portal architecture

> Architecture diagram of the GitHub repository himanshumishra-03/university-procurement-portal, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-07). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/himanshumishra-03/university-procurement-portal
- Repository: https://github.com/himanshumishra-03/university-procurement-portal

## Overview

#### Purpose and Runtime
This is a role-oriented academic procurement and inventory system: users request consumables/materials, inventory staff review and fulfill them, purchasing solicits supplier quotations and compares offers, and administrators manage users, courses, calendar, and requests. It runs as a Next.js frontend plus Express API, backed by PostgreSQL through Prisma. Container deployment is defined in `docker-compose.yml`, `backend/Dockerfile`, `frontend/Dockerfile`, and `render.yaml`.

#### Application Entry Points
The API composition root is `backend/server.js`, which performs dependency injection across repositories, services, controllers, middleware, and Express routes. The browser application uses the Next.js App Router from `frontend/src/app/layout.js`, with landing and login entry pages at `frontend/src/app/page.js` and `frontend/src/app/login/page.jsx`. Client API access is centralized in `frontend/src/lib/api.js`.

#### HTTP and Authorization Boundary
Express route modules expose domain APIs for authentication, inventory, requests, purchasing, students, and administration: `backend/app_routes/auth.routes.js`, `backend/app_routes/inventory.routes.js`, and `backend/app_routes/purchasing.routes.js`. Controllers translate HTTP requests to use-case calls, including `backend/app_controllers/MaterialRequestController.js`, `backend/app_controllers/InventoryController.js`, and `backend/app_controllers/PurchasingController.js`. `backend/middleware/auth.middleware.js` is the authentication/authorization boundary, using JWTs; credentials and session issuance are handled by `backend/services/AuthService.js`.

#### Domain Service and Persistence Layers
Business workflows reside in service classes: requests in `backend/services/MaterialRequestService.js`, stock/borrowing in `backend/services/InventoryService.js`, and supplier quotation/purchase work in `backend/services/PurchasingService.js`. These call repository interfaces and Prisma implementations, keeping database operations isolated: `backend/repositories/MaterialRequestRepository.js`, `backend/repositories/prisma/PrismaMaterialRequestRepository.js`, and `backend/repositories/prisma/PrismaInventoryRepository.js`. PostgreSQL schema evolution is owned by `backend/prisma/schema.prisma` and its migrations.

#### Request-to-Procurement Flow
Faculty and students initiate material or consumable needs through dashboard/request screens, such as `frontend/src/app/dashboard/faculty/request/page.jsx` and `frontend/src/app/student/consumables/request/page.jsx`. Requests flow through inventory review (`frontend/src/app/dashboard/inventory/review/page.jsx`), then purchasing request and quotation views (`frontend/src/app/dashboard/purchasing/requests/page.jsx`, `frontend/src/app/dashboard/purchasing/quotations/page.jsx`). Purchasing manages suppliers and compares quotations through `backend/services/SupplierService.js`, `backend/repositories/prisma/PrismaSupplierRepository.js`, and `backend/repositories/prisma/PrismaQuotationRepository.js`.

#### Inventory Lifecycle
Inventory personnel manage catalog/stock, borrowing, history, and material-request fulfillment from `frontend/src/app/dashboard/inventory/manage/page.jsx`, `frontend/src/app/dashboard/inventory/borrow/page.jsx`, and `frontend/src/app/dashboard/inventory/history/page.jsx`. Backend inventory behavior is concentrated in `backend/services/InventoryService.js` and `backend/repositories/InventoryRepository.js`; resulting inventory state is persisted through Prisma and can feed request decisions.

#### External Interaction and Scheduled Operations
Supplier-facing RFQ access is exposed as a tokenized public frontend route at `frontend/src/app/portal/rfq/[token]/page.jsx`, separating external supplier interaction from authenticated dashboards. Email integration is encapsulated by `backend/services/EmailService.js`; operational scripts include overdue reminder dispatch in `backend/scripts/overdueReminders.js` and data/bootstrap scripts under `backend/scripts/`. Administrative functions are represented by `backend/services/AdminService.js` and `frontend/src/app/dashboard/admin/page.jsx`.

Main entry points: [`frontend/src/app/layout.js`](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/layout.js) (App Router), [`backend/app_controllers/MaterialRequestController.js`](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/app_controllers/MaterialRequestController.js) (HTTP controllers), [`frontend/src/lib/api.js`](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/lib/api.js) (Client API), [`backend/repositories/prisma/PrismaMaterialRequestRepository.js`](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/repositories/prisma/PrismaMaterialRequestRepository.js) (Prisma repositories)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Next.js frontend"]
  node_next_app["App Router<br/>Next.js app<br/>[layout.js]"]
  node_request_screens["Request screens<br/>frontend workflow<br/>[page.jsx]"]
  node_inventory_screens["Inventory screens<br/>frontend workflow<br/>[page.jsx]"]
  node_purchasing_screens["Purchasing screens<br/>frontend workflow<br/>[page.jsx]"]
  node_rfq_portal["Public RFQ portal<br/>tokenized frontend route<br/>[page.jsx]"]
  node_client_api["Client API<br/>API client<br/>[api.js]"]
end

subgraph group_api["Express API"]
  node_express_server["API composition root<br/>Express server<br/>[server.js]"]
  node_auth_boundary{{"JWT authorization<br/>Express middleware<br/>[auth.middleware.js]"}}
  node_api_routes["Domain routes<br/>Express routes"]
  node_controllers["HTTP controllers<br/>controller layer"]
end

subgraph group_domain["Domain services"]
  node_auth_service["Authentication<br/>[AuthService.js]"]
  node_request_service["Material requests"]
  node_inventory_service["Inventory lifecycle"]
  node_purchasing_service["Purchasing and quotations"]
end

subgraph group_data["Persistence"]
  node_prisma_repositories["Prisma repositories<br/>repository implementations"]
  node_postgres[("PostgreSQL<br/>database<br/>[schema.prisma]")]
end

subgraph group_operations["External and operations"]
  node_email["Email integration<br/>[EmailService.js]"]
  node_overdue_job["Overdue reminders<br/>scheduled script"]
  node_deployment["Container deployment<br/>deployment definition<br/>[docker-compose.yml]"]
end

node_browser(("Browser users"))

node_browser -->|"uses"| node_next_app
node_next_app -->|"renders"| node_request_screens
node_next_app -->|"renders"| node_inventory_screens
node_next_app -->|"renders"| node_purchasing_screens
node_next_app -->|"exposes"| node_rfq_portal
node_request_screens -->|"submits requests"| node_client_api
node_inventory_screens -->|"manages stock"| node_client_api
node_purchasing_screens -->|"manages procurement"| node_client_api
node_rfq_portal -->|"submits quotations"| node_client_api
node_client_api -->|"HTTP"| node_express_server
node_express_server -->|"protects routes"| node_auth_boundary
node_auth_boundary -->|"authorizes"| node_api_routes
node_api_routes -->|"dispatches"| node_controllers
node_controllers -->|"auth operations"| node_auth_service
node_controllers -->|"request operations"| node_request_service
node_controllers -->|"inventory operations"| node_inventory_service
node_controllers -->|"purchasing operations"| node_purchasing_service
node_request_service -->|"persists requests"| node_prisma_repositories
node_inventory_service -->|"persists inventory"| node_prisma_repositories
node_purchasing_service -->|"persists offers"| node_prisma_repositories
node_prisma_repositories -->|"Prisma queries"| node_postgres
node_purchasing_service -->|"sends RFQ communication"| node_email
node_overdue_job -.->|"checks overdue borrowing"| node_inventory_service
node_overdue_job -->|"sends reminders"| node_email
node_deployment -.->|"deploys"| node_next_app
node_deployment -.->|"deploys"| node_express_server
node_deployment -.->|"provisions"| node_postgres

click node_next_app "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/layout.js"
click node_request_screens "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/dashboard/faculty/request/page.jsx"
click node_inventory_screens "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/dashboard/inventory/manage/page.jsx"
click node_purchasing_screens "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/dashboard/purchasing/requests/page.jsx"
click node_rfq_portal "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/portal/rfq/%5Btoken%5D/page.jsx"
click node_client_api "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/lib/api.js"
click node_express_server "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/server.js"
click node_auth_boundary "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/middleware/auth.middleware.js"
click node_api_routes "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/app_routes/inventory.routes.js"
click node_controllers "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/app_controllers/MaterialRequestController.js"
click node_auth_service "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/AuthService.js"
click node_request_service "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/MaterialRequestService.js"
click node_inventory_service "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/InventoryService.js"
click node_purchasing_service "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/PurchasingService.js"
click node_prisma_repositories "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/repositories/prisma/PrismaMaterialRequestRepository.js"
click node_postgres "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/prisma/schema.prisma"
click node_email "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/EmailService.js"
click node_overdue_job "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/scripts/overdueReminders.js"
click node_deployment "https://github.com/himanshumishra-03/university-procurement-portal/blob/main/docker-compose.yml"

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_next_app,node_request_screens,node_inventory_screens,node_purchasing_screens,node_rfq_portal,node_client_api toneBlue
class node_express_server,node_auth_boundary,node_api_routes,node_controllers toneAmber
class node_auth_service,node_request_service,node_inventory_service,node_purchasing_service toneMint
class node_prisma_repositories,node_postgres toneRose
class node_email,node_overdue_job,node_deployment toneIndigo
class node_browser toneNeutral
```

## Components

### Next.js frontend

- [App Router](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/layout.js): Next.js app · `frontend/src/app/layout.js`
- [Request screens](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/dashboard/faculty/request/page.jsx): frontend workflow · `frontend/src/app/dashboard/faculty/request/page.jsx`
- [Inventory screens](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/dashboard/inventory/manage/page.jsx): frontend workflow · Manage, borrow, review, and history workflows. · `frontend/src/app/dashboard/inventory/manage/page.jsx`
- [Purchasing screens](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/dashboard/purchasing/requests/page.jsx): frontend workflow · Request and quotation management. · `frontend/src/app/dashboard/purchasing/requests/page.jsx`
- [Public RFQ portal](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/app/portal/rfq/%5Btoken%5D/page.jsx): tokenized frontend route · Supplier-facing quotation access outside authenticated dashboards. · `frontend/src/app/portal/rfq/[token]/page.jsx`
- [Client API](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/frontend/src/lib/api.js): API client · `frontend/src/lib/api.js`

### Express API

- [API composition root](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/server.js): Express server · Wires repositories, services, controllers, middleware, and routes. · `backend/server.js`
- [JWT authorization](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/middleware/auth.middleware.js): Express middleware · `backend/middleware/auth.middleware.js`
- [Domain routes](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/app_routes/inventory.routes.js): Express routes · Authentication, inventory, requests, purchasing, student, and administration APIs. · `backend/app_routes/inventory.routes.js`
- [HTTP controllers](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/app_controllers/MaterialRequestController.js): controller layer · Translates HTTP operations to use cases. · `backend/app_controllers/MaterialRequestController.js`

### Domain services

- [Authentication](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/AuthService.js): service · Validates credentials and issues sessions. · `backend/services/AuthService.js`
- [Material requests](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/MaterialRequestService.js): service · Coordinates request review and fulfillment decisions. · `backend/services/MaterialRequestService.js`
- [Inventory lifecycle](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/InventoryService.js): service · Manages catalog, stock, borrowing, history, and fulfillment. · `backend/services/InventoryService.js`
- [Purchasing and quotations](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/PurchasingService.js): service · Solicits, compares, and processes supplier offers. · `backend/services/PurchasingService.js`

### Persistence

- [Prisma repositories](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/repositories/prisma/PrismaMaterialRequestRepository.js): repository implementations · Isolate request, inventory, supplier, and quotation database operations. · `backend/repositories/prisma/PrismaMaterialRequestRepository.js`
- [PostgreSQL](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/prisma/schema.prisma): database · Schema and migrations are Prisma-owned. · `backend/prisma/schema.prisma`

### External and operations

- [Email integration](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/services/EmailService.js): service · Delivers operational and supplier communications. · `backend/services/EmailService.js`
- [Overdue reminders](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/backend/scripts/overdueReminders.js): scheduled script · `backend/scripts/overdueReminders.js`
- [Container deployment](https://github.com/himanshumishra-03/university-procurement-portal/blob/main/docker-compose.yml): deployment definition · Runs frontend, API, and database services. · `docker-compose.yml`

### Other components

- **Browser users**: users · Faculty, students, inventory, purchasing, and administrators.

## Connections

- Browser users → App Router: uses
- App Router → Request screens: renders
- App Router → Inventory screens: renders
- App Router → Purchasing screens: renders
- App Router → Public RFQ portal: exposes
- Request screens → Client API: submits requests
- Inventory screens → Client API: manages stock
- Purchasing screens → Client API: manages procurement
- Public RFQ portal → Client API: submits quotations
- Client API → API composition root: HTTP
- API composition root → JWT authorization: protects routes
- JWT authorization → Domain routes: authorizes
- Domain routes → HTTP controllers: dispatches
- HTTP controllers → Authentication: auth operations
- HTTP controllers → Material requests: request operations
- HTTP controllers → Inventory lifecycle: inventory operations
- HTTP controllers → Purchasing and quotations: purchasing operations
- Material requests → Prisma repositories: persists requests
- Inventory lifecycle → Prisma repositories: persists inventory
- Purchasing and quotations → Prisma repositories: persists offers
- Prisma repositories → PostgreSQL: Prisma queries
- Purchasing and quotations → Email integration: sends RFQ communication
- Overdue reminders → Inventory lifecycle: checks overdue borrowing
- Overdue reminders → Email integration: sends reminders
- Container deployment → App Router: deploys
- Container deployment → API composition root: deploys
- Container deployment → PostgreSQL: provisions
