# webdevmahdi/university-management-system architecture

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

- Interactive diagram: https://gitdiagram.com/webdevmahdi/university-management-system
- Repository: https://github.com/webdevmahdi/university-management-system

## Overview

This is a university/academic management REST API. The principal workflow is an HTTP request entering the Express app, reaching a domain route/controller, invoking a service that reads or updates MongoDB models, and returning a JSON response; errors are normalized through shared middleware. The source index supports the shown service/model and controller/service relationships, but route mounting details and several module implementations were not excerpted, so those links are omitted rather than inferred.

Main entry points: [`src/app/modules/user`](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/user) (User accounts), [`src/app/modules/student`](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/student) (Student records), [`src/app/utils/response.ts`](https://github.com/webdevmahdi/university-management-system/blob/main/src/app/utils/response.ts) (JSON response), [`src/app/modules/academicDepartment`](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/academicDepartment) (Academic departments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["API runtime"]
  node_express["Express app<br/>[app.ts]"]
  node_routes["Route registry<br/>[index.ts]"]
  node_validation["Request validation"]
  node_errors["Error handling"]
  node_response["JSON response<br/>[response.ts]"]
  node_query["Query builder<br/>[QueryBuilder.ts]"]
end

subgraph group_catalog["Academic catalog"]
  node_semester["Academic semesters"]
  node_facultycatalog["Academic faculties"]
  node_department["Academic departments"]
end

subgraph group_people["People records"]
  node_student["Student records"]
  node_faculty["Faculty records"]
  node_admin["Admin records"]
  node_user["User accounts"]
end

subgraph group_teaching["Courses and teaching"]
  node_course["Course management"]
end

node_client(("API client"))
node_database[("MongoDB")]

node_client -.->|"sends requests"| node_express
node_express -->|"mounts routes"| node_routes
node_express -->|"uses middleware"| node_errors
node_express -->|"handles unmatched paths"| node_routes
node_department -->|"validates requests"| node_validation
node_facultycatalog -->|"validates requests"| node_validation
node_course -->|"validates requests"| node_validation
node_department -->|"reads and writes"| node_database
node_facultycatalog -->|"reads and writes"| node_database
node_semester -->|"reads and writes"| node_database
node_student -->|"reads and writes"| node_database
node_faculty -->|"reads and writes"| node_database
node_admin -->|"reads and writes"| node_database
node_user -->|"creates accounts"| node_database
node_course -->|"reads and writes"| node_database
node_student -->|"builds list queries"| node_query
node_faculty -->|"builds list queries"| node_query
node_admin -->|"builds list queries"| node_query
node_course -->|"builds list queries"| node_query
node_department -->|"formats results"| node_response
node_facultycatalog -->|"formats results"| node_response
node_semester -->|"formats results"| node_response
node_student -->|"formats results"| node_response
node_faculty -->|"formats results"| node_response
node_course -->|"formats results"| node_response
node_department -->|"references model"| node_facultycatalog
node_student -->|"looks up semester"| node_semester
node_user -->|"creates profile"| node_student
node_user -->|"creates profile"| node_faculty
node_user -->|"creates profile"| node_admin
node_user -->|"checks department"| node_department
node_student -->|"soft deletes account"| node_user
node_faculty -->|"soft deletes account"| node_user
node_admin -->|"soft deletes account"| node_user

click node_express "https://github.com/webdevmahdi/university-management-system/blob/main/src/app/app.ts"
click node_routes "https://github.com/webdevmahdi/university-management-system/blob/main/src/app/routes/index.ts"
click node_validation "https://github.com/webdevmahdi/university-management-system/blob/main/src/app/middlewares/validationSchema.ts"
click node_errors "https://github.com/webdevmahdi/university-management-system/blob/main/src/app/middlewares/globalErrorHandler.ts"
click node_response "https://github.com/webdevmahdi/university-management-system/blob/main/src/app/utils/response.ts"
click node_query "https://github.com/webdevmahdi/university-management-system/blob/main/src/app/builder/QueryBuilder.ts"
click node_semester "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/academicSemester"
click node_facultycatalog "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/academicFaculty"
click node_department "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/academicDepartment"
click node_student "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/student"
click node_faculty "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/faculty"
click node_admin "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/Admin"
click node_user "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/user"
click node_course "https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/course"

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_express,node_routes,node_validation,node_errors,node_response,node_query,node_client toneBlue
class node_semester,node_facultycatalog,node_department,node_database toneAmber
class node_student,node_faculty,node_admin,node_user toneMint
class node_course toneRose
```

## Components

### API runtime

- [Express app](https://github.com/webdevmahdi/university-management-system/blob/main/src/app/app.ts): `src/app/app.ts`
- [Route registry](https://github.com/webdevmahdi/university-management-system/blob/main/src/app/routes/index.ts): `src/app/routes/index.ts`
- [Request validation](https://github.com/webdevmahdi/university-management-system/blob/main/src/app/middlewares/validationSchema.ts): `src/app/middlewares/validationSchema.ts`
- [Error handling](https://github.com/webdevmahdi/university-management-system/blob/main/src/app/middlewares/globalErrorHandler.ts): `src/app/middlewares/globalErrorHandler.ts`
- [JSON response](https://github.com/webdevmahdi/university-management-system/blob/main/src/app/utils/response.ts): `src/app/utils/response.ts`
- [Query builder](https://github.com/webdevmahdi/university-management-system/blob/main/src/app/builder/QueryBuilder.ts): `src/app/builder/QueryBuilder.ts`

### Academic catalog

- [Academic semesters](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/academicSemester): `src/app/modules/academicSemester`
- [Academic faculties](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/academicFaculty): `src/app/modules/academicFaculty`
- [Academic departments](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/academicDepartment): `src/app/modules/academicDepartment`

### People records

- [Student records](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/student): `src/app/modules/student`
- [Faculty records](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/faculty): `src/app/modules/faculty`
- [Admin records](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/Admin): `src/app/modules/Admin`
- [User accounts](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/user): `src/app/modules/user`

### Courses and teaching

- [Course management](https://github.com/webdevmahdi/university-management-system/tree/main/src/app/modules/course): `src/app/modules/course`

### Other components

- **API client**
- **MongoDB**

## Connections

- API client → Express app: sends requests
- Express app → Route registry: mounts routes (evidence: `src/app/app.ts`)
- Express app → Error handling: uses middleware (evidence: `src/app/app.ts`)
- Express app → Route registry: handles unmatched paths (evidence: `src/app/app.ts`)
- Academic departments → Request validation: validates requests (evidence: `src/app/modules/academicDepartment/academicDepartment.router.ts`)
- Academic faculties → Request validation: validates requests (evidence: `src/app/modules/academicFaculty/academicFaculty.router.ts`)
- Course management → Request validation: validates requests (evidence: `src/app/modules/course/course.router.ts`)
- Academic departments → MongoDB: reads and writes (evidence: `src/app/modules/academicDepartment/academicDepartment.service.ts`)
- Academic faculties → MongoDB: reads and writes (evidence: `src/app/modules/academicFaculty/academicFaculty.service.ts`)
- Academic semesters → MongoDB: reads and writes (evidence: `src/app/modules/academicSemester/academicSemester.service.ts`)
- Student records → MongoDB: reads and writes (evidence: `src/app/modules/student/student.service.ts`)
- Faculty records → MongoDB: reads and writes (evidence: `src/app/modules/faculty/faculty.services.ts`)
- Admin records → MongoDB: reads and writes (evidence: `src/app/modules/Admin/admin.service.ts`)
- User accounts → MongoDB: creates accounts (evidence: `src/app/modules/user/user.service.ts`)
- Course management → MongoDB: reads and writes (evidence: `src/app/modules/course/course.service.ts`)
- Student records → Query builder: builds list queries (evidence: `src/app/modules/student/student.service.ts`)
- Faculty records → Query builder: builds list queries (evidence: `src/app/modules/faculty/faculty.services.ts`)
- Admin records → Query builder: builds list queries (evidence: `src/app/modules/Admin/admin.service.ts`)
- Course management → Query builder: builds list queries (evidence: `src/app/modules/course/course.service.ts`)
- Academic departments → JSON response: formats results (evidence: `src/app/modules/academicDepartment/academicDepartment.controller.ts`)
- Academic faculties → JSON response: formats results (evidence: `src/app/modules/academicFaculty/academicFaculty.controller.ts`)
- Academic semesters → JSON response: formats results (evidence: `src/app/modules/academicSemester/academicSemester.controller.ts`)
- Student records → JSON response: formats results (evidence: `src/app/modules/student/student.controller.ts`)
- Faculty records → JSON response: formats results (evidence: `src/app/modules/faculty/faculty.controller.ts`)
- Course management → JSON response: formats results (evidence: `src/app/modules/course/course.controller.ts`)
- Academic departments → Academic faculties: references model (evidence: `src/app/modules/academicDepartment/academicDepartment.model.ts`)
- Student records → Academic semesters: looks up semester (evidence: `src/app/modules/user/user.service.ts`)
- User accounts → Student records: creates profile (evidence: `src/app/modules/user/user.service.ts`)
- User accounts → Faculty records: creates profile (evidence: `src/app/modules/user/user.service.ts`)
- User accounts → Admin records: creates profile (evidence: `src/app/modules/user/user.service.ts`)
- User accounts → Academic departments: checks department (evidence: `src/app/modules/user/user.service.ts`)
- Student records → User accounts: soft deletes account (evidence: `src/app/modules/student/student.service.ts`)
- Faculty records → User accounts: soft deletes account (evidence: `src/app/modules/faculty/faculty.services.ts`)
- Admin records → User accounts: soft deletes account (evidence: `src/app/modules/Admin/admin.service.ts`)
