# dcane4ever/support-system-eac architecture

> Architecture diagram of the GitHub repository dcane4ever/support-system-eac, 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/dcane4ever/support-system-eac
- Repository: https://github.com/dcane4ever/support-system-eac

## Overview

Classroom Support System is a Spring Boot application for students, teachers, and support agents. Users register and verify accounts, students enter a support queue, agents accept sessions and exchange real-time messages, and users can view chat history or reports. Voice calling adds WebRTC signaling alongside chat. The graph follows the documented capabilities and sampled caller/service relationships; unsampled controller and integration details are represented conservatively, with no inferred links where wiring was not shown.

Main entry points: [`src/main/java/com/cusservice/bsit/service/ChatService.java`](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/ChatService.java) (Queue and chat service), [`src/main/java/com/cusservice/bsit/controller/ChatController.java`](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/ChatController.java) (Chat messaging and queue routes), [`src/main/java/com/cusservice/bsit/service/UserService.java`](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/UserService.java) (User service), [`src/main/java/com/cusservice/bsit/repository/UserRepository.java`](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/UserRepository.java) (User repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and access"]
  node_auth["Authentication and registration"]
  node_user_service["User service<br/>[UserService.java]"]
  node_auth_details["Login user lookup"]
  node_security["Security configuration"]
  node_email["Verification email<br/>[EmailService.java]"]
end

subgraph group_support["Support conversations"]
  node_student_ui["Student support pages<br/>[student-chat.html]"]
  node_agent_ui["Agent queue and chat<br/>[support-queue.html]"]
  node_chat_controller["Chat messaging and queue routes"]
  node_chat_api["Chat history API"]
  node_chat_service["Queue and chat service<br/>[ChatService.java]"]
  node_chat_messages["Chat message model<br/>[ChatMessage.java]"]
  node_queue_dto["Queue student view"]
  node_ws_config["WebSocket configuration"]
  node_chat_history["Chat history pages<br/>[chat-history.html]"]
end

subgraph group_calling["Voice calling"]
  node_call_service["Call session lifecycle"]
  node_call_model["Call session model<br/>[CallSession.java]"]
  node_call_repo["Call session repository"]
  node_webrtc["WebRTC browser client<br/>[webrtc-call.js]"]
  node_turn["TURN configuration endpoint"]
end

subgraph group_insights["Reports and analytics"]
  node_reports_ui["Support reports page"]
  node_report_controller["Report routes"]
  node_report_service["Session analytics<br/>[ReportService.java]"]
end

subgraph group_persistence["Domain persistence"]
  node_user_repo["User repository"]
  node_chat_repo["Chat session repository"]
  node_message_repo["Chat message repository"]
  node_user_model["User model<br/>[User.java]"]
  node_chat_model["Chat session model<br/>[ChatSession.java]"]
end

node_users(("Students, teachers, agents"))
node_mysql[("MySQL database")]
node_sendgrid["SendGrid email service"]

node_users -->|"register or sign in"| node_auth
node_auth -->|"register and verify"| node_user_service
node_user_service -->|"persist accounts"| node_user_repo
node_user_service -->|"send verification"| node_email
node_email -.->|"send email"| node_sendgrid
node_security -->|"loads user details"| node_auth_details
node_auth_details -->|"find account"| node_user_repo
node_student_ui -.->|"send chat events"| node_chat_controller
node_agent_ui -.->|"accept queue sessions"| node_chat_controller
node_chat_controller -->|"manage sessions"| node_chat_service
node_chat_controller -->|"look up participants"| node_user_service
node_chat_service -->|"read and save sessions"| node_chat_repo
node_chat_service -->|"read and save messages"| node_message_repo
node_chat_service -->|"build queue view"| node_queue_dto
node_chat_service -.->|"broadcast updates"| node_ws_config
node_chat_api -->|"serve chat history"| node_chat_service
node_chat_history -.->|"request history"| node_chat_api
node_chat_repo -.->|"store sessions"| node_mysql
node_message_repo -.->|"store messages"| node_mysql
node_user_repo -.->|"store accounts"| node_mysql
node_report_controller -->|"request analytics"| node_report_service
node_report_service -->|"query sessions"| node_chat_repo
node_report_service -->|"query users"| node_user_repo
node_reports_ui -.->|"view reports"| node_report_controller
node_webrtc -.->|"get call configuration"| node_turn
node_call_service -->|"persist call state"| node_call_repo
node_call_service -->|"update lifecycle"| node_call_model
node_call_repo -.->|"store calls"| node_mysql
node_users -->|"start voice call"| node_webrtc
node_webrtc -.->|"exchange signaling"| node_chat_controller

click node_auth "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/AuthController.java"
click node_user_service "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/UserService.java"
click node_auth_details "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/CustomUserDetailsService.java"
click node_security "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/config/SecurityConfig.java"
click node_email "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/EmailService.java"
click node_student_ui "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/student-chat.html"
click node_agent_ui "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/support-queue.html"
click node_chat_controller "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/ChatController.java"
click node_chat_api "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/ChatApiController.java"
click node_chat_service "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/ChatService.java"
click node_chat_messages "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/ChatMessage.java"
click node_queue_dto "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/dto/QueueStudentDTO.java"
click node_ws_config "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/config/WebSocketConfig.java"
click node_chat_history "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/chat-history.html"
click node_call_service "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/CallSessionService.java"
click node_call_model "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/CallSession.java"
click node_call_repo "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/CallSessionRepository.java"
click node_webrtc "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/static/js/webrtc-call.js"
click node_turn "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/TurnConfigController.java"
click node_reports_ui "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/support-reports.html"
click node_report_controller "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/ReportController.java"
click node_report_service "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/ReportService.java"
click node_user_repo "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/UserRepository.java"
click node_chat_repo "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/ChatSessionRepository.java"
click node_message_repo "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/ChatMessageRepository.java"
click node_user_model "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/User.java"
click node_chat_model "https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/ChatSession.java"

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_auth,node_user_service,node_auth_details,node_security,node_email toneBlue
class node_student_ui,node_agent_ui,node_chat_controller,node_chat_api,node_chat_service,node_chat_messages,node_queue_dto,node_ws_config,node_chat_history,node_mysql toneAmber
class node_call_service,node_call_model,node_call_repo,node_webrtc,node_turn toneMint
class node_reports_ui,node_report_controller,node_report_service toneRose
class node_user_repo,node_chat_repo,node_message_repo,node_user_model,node_chat_model,node_users,node_sendgrid toneIndigo
```

## Components

### Identity and access

- [Authentication and registration](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/AuthController.java): `src/main/java/com/cusservice/bsit/controller/AuthController.java`
- [User service](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/UserService.java): `src/main/java/com/cusservice/bsit/service/UserService.java`
- [Login user lookup](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/CustomUserDetailsService.java): `src/main/java/com/cusservice/bsit/service/CustomUserDetailsService.java`
- [Security configuration](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/config/SecurityConfig.java): `src/main/java/com/cusservice/bsit/config/SecurityConfig.java`
- [Verification email](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/EmailService.java): `src/main/java/com/cusservice/bsit/service/EmailService.java`

### Support conversations

- [Student support pages](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/student-chat.html): `src/main/resources/templates/student-chat.html`
- [Agent queue and chat](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/support-queue.html): `src/main/resources/templates/support-queue.html`
- [Chat messaging and queue routes](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/ChatController.java): `src/main/java/com/cusservice/bsit/controller/ChatController.java`
- [Chat history API](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/ChatApiController.java): `src/main/java/com/cusservice/bsit/controller/ChatApiController.java`
- [Queue and chat service](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/ChatService.java): `src/main/java/com/cusservice/bsit/service/ChatService.java`
- [Chat message model](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/ChatMessage.java): `src/main/java/com/cusservice/bsit/model/ChatMessage.java`
- [Queue student view](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/dto/QueueStudentDTO.java): `src/main/java/com/cusservice/bsit/dto/QueueStudentDTO.java`
- [WebSocket configuration](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/config/WebSocketConfig.java): `src/main/java/com/cusservice/bsit/config/WebSocketConfig.java`
- [Chat history pages](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/chat-history.html): `src/main/resources/templates/chat-history.html`

### Voice calling

- [Call session lifecycle](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/CallSessionService.java): `src/main/java/com/cusservice/bsit/service/CallSessionService.java`
- [Call session model](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/CallSession.java): `src/main/java/com/cusservice/bsit/model/CallSession.java`
- [Call session repository](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/CallSessionRepository.java): `src/main/java/com/cusservice/bsit/repository/CallSessionRepository.java`
- [WebRTC browser client](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/static/js/webrtc-call.js): `src/main/resources/static/js/webrtc-call.js`
- [TURN configuration endpoint](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/TurnConfigController.java): `src/main/java/com/cusservice/bsit/controller/TurnConfigController.java`

### Reports and analytics

- [Support reports page](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/resources/templates/support-reports.html): `src/main/resources/templates/support-reports.html`
- [Report routes](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/controller/ReportController.java): `src/main/java/com/cusservice/bsit/controller/ReportController.java`
- [Session analytics](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/service/ReportService.java): `src/main/java/com/cusservice/bsit/service/ReportService.java`

### Domain persistence

- [User repository](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/UserRepository.java): `src/main/java/com/cusservice/bsit/repository/UserRepository.java`
- [Chat session repository](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/ChatSessionRepository.java): `src/main/java/com/cusservice/bsit/repository/ChatSessionRepository.java`
- [Chat message repository](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/repository/ChatMessageRepository.java): `src/main/java/com/cusservice/bsit/repository/ChatMessageRepository.java`
- [User model](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/User.java): `src/main/java/com/cusservice/bsit/model/User.java`
- [Chat session model](https://github.com/dcane4ever/support-system-eac/blob/main/src/main/java/com/cusservice/bsit/model/ChatSession.java): `src/main/java/com/cusservice/bsit/model/ChatSession.java`

### Other components

- **Students, teachers, agents**
- **MySQL database**
- **SendGrid email service**

## Connections

- Students, teachers, agents → Authentication and registration: register or sign in (evidence: `README.md`)
- Authentication and registration → User service: register and verify (evidence: `src/main/java/com/cusservice/bsit/controller/AuthController.java`)
- User service → User repository: persist accounts (evidence: `src/main/java/com/cusservice/bsit/service/UserService.java`)
- User service → Verification email: send verification (evidence: `src/main/java/com/cusservice/bsit/service/UserService.java`)
- Verification email → SendGrid email service: send email (evidence: `README.md`)
- Security configuration → Login user lookup: loads user details (evidence: `src/main/java/com/cusservice/bsit/config/SecurityConfig.java`)
- Login user lookup → User repository: find account (evidence: `src/main/java/com/cusservice/bsit/service/CustomUserDetailsService.java`)
- Student support pages → Chat messaging and queue routes: send chat events (evidence: `README.md`)
- Agent queue and chat → Chat messaging and queue routes: accept queue sessions (evidence: `README.md`)
- Chat messaging and queue routes → Queue and chat service: manage sessions (evidence: `src/main/java/com/cusservice/bsit/controller/ChatController.java`)
- Chat messaging and queue routes → User service: look up participants (evidence: `src/main/java/com/cusservice/bsit/controller/ChatController.java`)
- Queue and chat service → Chat session repository: read and save sessions (evidence: `src/main/java/com/cusservice/bsit/service/ChatService.java`)
- Queue and chat service → Chat message repository: read and save messages (evidence: `src/main/java/com/cusservice/bsit/service/ChatService.java`)
- Queue and chat service → Queue student view: build queue view (evidence: `src/main/java/com/cusservice/bsit/service/ChatService.java`)
- Queue and chat service → WebSocket configuration: broadcast updates (evidence: `src/main/java/com/cusservice/bsit/service/ChatService.java`)
- Chat history API → Queue and chat service: serve chat history (evidence: `src/main/java/com/cusservice/bsit/controller/ChatApiController.java`)
- Chat history pages → Chat history API: request history (evidence: `README.md`)
- Chat session repository → MySQL database: store sessions (evidence: `README.md`)
- Chat message repository → MySQL database: store messages (evidence: `README.md`)
- User repository → MySQL database: store accounts (evidence: `README.md`)
- Report routes → Session analytics: request analytics (evidence: `src/main/java/com/cusservice/bsit/controller/ReportController.java`)
- Session analytics → Chat session repository: query sessions (evidence: `src/main/java/com/cusservice/bsit/service/ReportService.java`)
- Session analytics → User repository: query users (evidence: `src/main/java/com/cusservice/bsit/service/ReportService.java`)
- Support reports page → Report routes: view reports (evidence: `README.md`)
- WebRTC browser client → TURN configuration endpoint: get call configuration
- Call session lifecycle → Call session repository: persist call state (evidence: `src/main/java/com/cusservice/bsit/service/CallSessionService.java`)
- Call session lifecycle → Call session model: update lifecycle (evidence: `src/main/java/com/cusservice/bsit/service/CallSessionService.java`)
- Call session repository → MySQL database: store calls (evidence: `README.md`)
- Students, teachers, agents → WebRTC browser client: start voice call (evidence: `README.md`)
- WebRTC browser client → Chat messaging and queue routes: exchange signaling (evidence: `README.md`)
