# kiet-trntn/event_management_system architecture

> Architecture diagram of the GitHub repository kiet-trntn/event_management_system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kiet-trntn/event_management_system
- Repository: https://github.com/kiet-trntn/event_management_system

## Overview

This is an event-management application for administrators, staff, and public event registrants. The main workflow is managing events and members, assigning work, and tracking submissions; users also have calendar, registration, notification, and messaging capabilities. The React client routes role-specific screens to an Express API, whose controllers use MySQL. Authentication and role checks protect API routes, while background jobs handle deadline reminders and event-status updates. Several domain modules are present in the tree but were not sampled, so their internal connections are left unasserted.

Main entry points: [`server/src/app.js`](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/app.js) (Express API), [`client/src/App.jsx`](https://github.com/kiet-trntn/event_management_system/blob/main/client/src/App.jsx) (Role-based routes), [`server/src/config/db.js`](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/config/db.js) (MySQL pool), [`server/src/controllers/notificationController.js`](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/notificationController.js) (Notifications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Role-based routes<br/>[App.jsx]"]
  node_admin["Admin workspace"]
  node_staff["Staff workspace"]
  node_publicreg["Public registration<br/>[RegisterEvent.jsx]"]
  node_chat["Chat and trash<br/>[Chat.jsx]"]
end

subgraph group_api["API and access"]
  node_server["Express API<br/>[app.js]"]
  node_auth{{"Authentication and roles<br/>[authMiddleware.js]"}}
  node_db[("MySQL pool<br/>[db.js]")]
end

subgraph group_events["Events and people"]
  node_identity["Accounts and profiles<br/>[userController.js]"]
  node_eventctl["Event management<br/>[eventController.js]"]
  node_members["Event membership"]
  node_registrations["Event registration"]
end

subgraph group_work["Tasks and tracking"]
  node_tasks["Task management<br/>[taskController.js]"]
  node_submissions["Task submissions"]
  node_timeline["Event timelines"]
  node_calendar["Work calendar"]
  node_attachments["Attachments"]
  node_reports["Reports"]
end

subgraph group_engagement["Communication and services"]
  node_notify["Notifications"]
  node_messages["Messages and friends"]
  node_socket["Realtime sockets<br/>[socket.js]"]
  node_jobs["Reminder and status jobs"]
end

node_actor(("Admin, staff, registrant"))

node_actor -->|"uses"| node_app
node_app -->|"routes to"| node_admin
node_app -->|"routes to"| node_staff
node_app -->|"routes to"| node_publicreg
node_app -.->|"routes to"| node_chat
node_app -.->|"calls API"| node_server
node_server -->|"uses on routes"| node_auth
node_server -->|"routes requests"| node_identity
node_server -->|"routes requests"| node_eventctl
node_server -->|"routes requests"| node_members
node_server -->|"routes requests"| node_registrations
node_server -->|"routes requests"| node_tasks
node_server -->|"routes requests"| node_submissions
node_server -->|"routes requests"| node_timeline
node_server -->|"routes requests"| node_calendar
node_server -->|"routes requests"| node_attachments
node_server -->|"routes requests"| node_reports
node_server -->|"routes requests"| node_notify
node_server -->|"routes requests"| node_messages
node_eventctl -->|"queries"| node_db
node_eventctl -->|"creates notices"| node_notify
node_tasks -->|"queries"| node_db
node_tasks -->|"creates notices"| node_notify
node_submissions -->|"queries"| node_db
node_submissions -->|"creates notices"| node_notify
node_timeline -->|"queries"| node_db
node_auth -->|"checks user"| node_db
node_jobs -->|"checks deadlines"| node_db
node_jobs -->|"sends reminders"| node_notify
node_server -->|"starts jobs"| node_jobs
node_server -->|"initializes"| node_socket
node_socket -->|"queries"| node_db
node_notify -.->|"emits updates"| node_socket

click node_app "https://github.com/kiet-trntn/event_management_system/blob/main/client/src/App.jsx"
click node_admin "https://github.com/kiet-trntn/event_management_system/tree/main/client/src/pages/admin"
click node_staff "https://github.com/kiet-trntn/event_management_system/tree/main/client/src/pages/staff"
click node_publicreg "https://github.com/kiet-trntn/event_management_system/blob/main/client/src/pages/public/RegisterEvent.jsx"
click node_chat "https://github.com/kiet-trntn/event_management_system/blob/main/client/src/pages/Chat.jsx"
click node_server "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/app.js"
click node_auth "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/middlewares/authMiddleware.js"
click node_db "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/config/db.js"
click node_identity "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/userController.js"
click node_eventctl "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/eventController.js"
click node_members "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/eventMemberController.js"
click node_registrations "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/eventRegistrationController.js"
click node_tasks "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/taskController.js"
click node_submissions "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/taskSubmissionController.js"
click node_timeline "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/timelineController.js"
click node_calendar "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/calendarController.js"
click node_attachments "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/attachmentController.js"
click node_reports "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/reportController.js"
click node_notify "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/notificationController.js"
click node_messages "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/directMessageController.js"
click node_socket "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/socket/socket.js"
click node_jobs "https://github.com/kiet-trntn/event_management_system/blob/main/server/src/jobs/deadlineReminderJob.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_admin,node_staff,node_publicreg,node_chat toneBlue
class node_server,node_auth,node_db toneAmber
class node_identity,node_eventctl,node_members,node_registrations toneMint
class node_tasks,node_submissions,node_timeline,node_calendar,node_attachments,node_reports toneRose
class node_notify,node_messages,node_socket,node_jobs,node_actor toneIndigo
```

## Components

### Web client

- [Role-based routes](https://github.com/kiet-trntn/event_management_system/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Admin workspace](https://github.com/kiet-trntn/event_management_system/tree/main/client/src/pages/admin): `client/src/pages/admin`
- [Staff workspace](https://github.com/kiet-trntn/event_management_system/tree/main/client/src/pages/staff): `client/src/pages/staff`
- [Public registration](https://github.com/kiet-trntn/event_management_system/blob/main/client/src/pages/public/RegisterEvent.jsx): `client/src/pages/public/RegisterEvent.jsx`
- [Chat and trash](https://github.com/kiet-trntn/event_management_system/blob/main/client/src/pages/Chat.jsx): `client/src/pages/Chat.jsx`

### API and access

- [Express API](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/app.js): `server/src/app.js`
- [Authentication and roles](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/middlewares/authMiddleware.js): `server/src/middlewares/authMiddleware.js`
- [MySQL pool](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/config/db.js): `server/src/config/db.js`

### Events and people

- [Accounts and profiles](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/userController.js): `server/src/controllers/userController.js`
- [Event management](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/eventController.js): `server/src/controllers/eventController.js`
- [Event membership](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/eventMemberController.js): `server/src/controllers/eventMemberController.js`
- [Event registration](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/eventRegistrationController.js): `server/src/controllers/eventRegistrationController.js`

### Tasks and tracking

- [Task management](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/taskController.js): `server/src/controllers/taskController.js`
- [Task submissions](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/taskSubmissionController.js): `server/src/controllers/taskSubmissionController.js`
- [Event timelines](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/timelineController.js): `server/src/controllers/timelineController.js`
- [Work calendar](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/calendarController.js): `server/src/controllers/calendarController.js`
- [Attachments](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/attachmentController.js): `server/src/controllers/attachmentController.js`
- [Reports](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/reportController.js): `server/src/controllers/reportController.js`

### Communication and services

- [Notifications](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/notificationController.js): `server/src/controllers/notificationController.js`
- [Messages and friends](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/controllers/directMessageController.js): `server/src/controllers/directMessageController.js`
- [Realtime sockets](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/socket/socket.js): `server/src/socket/socket.js`
- [Reminder and status jobs](https://github.com/kiet-trntn/event_management_system/blob/main/server/src/jobs/deadlineReminderJob.js): `server/src/jobs/deadlineReminderJob.js`

### Other components

- **Admin, staff, registrant**

## Connections

- Admin, staff, registrant → Role-based routes: uses (evidence: `client/src/App.jsx`)
- Role-based routes → Admin workspace: routes to (evidence: `client/src/App.jsx`)
- Role-based routes → Staff workspace: routes to (evidence: `client/src/App.jsx`)
- Role-based routes → Public registration: routes to (evidence: `client/src/App.jsx`)
- Role-based routes → Chat and trash: routes to (evidence: `client/src/App.jsx`)
- Role-based routes → Express API: calls API
- Express API → Authentication and roles: uses on routes
- Express API → Accounts and profiles: routes requests (evidence: `server/src/app.js`)
- Express API → Event management: routes requests (evidence: `server/src/app.js`)
- Express API → Event membership: routes requests (evidence: `server/src/app.js`)
- Express API → Event registration: routes requests (evidence: `server/src/app.js`)
- Express API → Task management: routes requests (evidence: `server/src/app.js`)
- Express API → Task submissions: routes requests (evidence: `server/src/app.js`)
- Express API → Event timelines: routes requests (evidence: `server/src/app.js`)
- Express API → Work calendar: routes requests (evidence: `server/src/app.js`)
- Express API → Attachments: routes requests (evidence: `server/src/app.js`)
- Express API → Reports: routes requests (evidence: `server/src/app.js`)
- Express API → Notifications: routes requests (evidence: `server/src/app.js`)
- Express API → Messages and friends: routes requests (evidence: `server/src/app.js`)
- Event management → MySQL pool: queries (evidence: `server/src/controllers/eventController.js`)
- Event management → Notifications: creates notices (evidence: `server/src/controllers/eventController.js`)
- Task management → MySQL pool: queries (evidence: `server/src/controllers/taskController.js`)
- Task management → Notifications: creates notices (evidence: `server/src/controllers/taskController.js`)
- Task submissions → MySQL pool: queries (evidence: `server/src/controllers/taskSubmissionController.js`)
- Task submissions → Notifications: creates notices (evidence: `server/src/controllers/taskSubmissionController.js`)
- Event timelines → MySQL pool: queries (evidence: `server/src/controllers/timelineController.js`)
- Authentication and roles → MySQL pool: checks user (evidence: `server/src/middlewares/authMiddleware.js`)
- Reminder and status jobs → MySQL pool: checks deadlines (evidence: `server/src/jobs/deadlineReminderJob.js`)
- Reminder and status jobs → Notifications: sends reminders (evidence: `server/src/jobs/deadlineReminderJob.js`)
- Express API → Reminder and status jobs: starts jobs (evidence: `server/server.js`)
- Express API → Realtime sockets: initializes (evidence: `server/server.js`)
- Realtime sockets → MySQL pool: queries (evidence: `server/src/socket/socket.js`)
- Notifications → Realtime sockets: emits updates
