# ruvinda-shaluka/examsy-microservice architecture

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

- Interactive diagram: https://gitdiagram.com/ruvinda-shaluka/examsy-microservice
- Repository: https://github.com/ruvinda-shaluka/examsy-microservice
- Video tour (about a minute): https://gitdiagram.com/ruvinda-shaluka/examsy-microservice/video

## Overview

Examsy is a microservices examination platform. Students and teachers use the gateway-facing services to join classes, publish and take exams, and receive grading; administrators manage reports and platform metrics. Registration events create profile records, while exam submissions and released grades are distributed to grading, analytics, and notification consumers. The map follows the service boundaries and capabilities in the README and tree; source excerpts are interfaces rather than implementations, so internal call wiring and some event routes remain unverified.

Main entry points: [`services/examsy-api-gateway/src/main/java/lk/ijse/examsy/gateway/config/GatewayRoutesConfig.java`](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-api-gateway/src/main/java/lk/ijse/examsy/gateway/config/GatewayRoutesConfig.java) (API gateway), [`services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/service/impl/AuthServiceImpl.java`](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/service/impl/AuthServiceImpl.java) (Authentication), [`services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/service/impl/StudentExamServiceImpl.java`](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/service/impl/StudentExamServiceImpl.java) (Exam lifecycle), [`services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/service/impl/StudentClassServiceImpl.java`](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/service/impl/StudentClassServiceImpl.java) (Class management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_edge["Entry and identity"]
  node_gateway["API gateway"]
  node_auth["Authentication"]
  node_authdb[("User accounts")]
  node_authproducer["Registration events"]
end

subgraph group_learning["Classes and exams"]
  node_classes["Class management"]
  node_classdb[("Class records<br/>[CourseRepo.java]")]
  node_exam["Exam lifecycle"]
  node_examdb[("Exams and submissions")]
end

subgraph group_assessment["Grading and results"]
  node_submissionevent["Submission event"]
  node_grading["Smart grading"]
  node_ocr["Answer OCR"]
  node_gradeevent["Grade release event"]
end

subgraph group_operations["Profiles and administration"]
  node_profile["User profiles"]
  node_profiledb[("Profile records<br/>[StudentRepo.java]")]
  node_admin["Reports and dashboard"]
  node_metricsdb[("Platform metrics")]
  node_notifications["Notifications"]
  node_email["Email delivery"]
end

subgraph group_platform["Platform services"]
  node_kafka["Kafka broker"]
  node_discovery["Service discovery"]
  node_config["Central configuration"]
end

node_user(("Student / teacher / admin"))

node_user -->|"sends requests"| node_gateway
node_gateway -->|"routes requests"| node_auth
node_gateway -->|"routes requests"| node_classes
node_gateway -->|"routes requests"| node_exam
node_gateway -->|"routes requests"| node_admin
node_auth -->|"reads/writes"| node_authdb
node_auth -->|"publishes registration"| node_authproducer
node_authproducer -->|"publishes events"| node_kafka
node_kafka -->|"delivers registration"| node_profile
node_profile -->|"writes profiles"| node_profiledb
node_classes -->|"reads/writes"| node_classdb
node_exam -->|"reads/writes"| node_examdb
node_exam -->|"publishes submission"| node_submissionevent
node_submissionevent -->|"publishes event"| node_kafka
node_kafka -->|"delivers submission"| node_grading
node_grading -->|"extracts answers"| node_ocr
node_grading -->|"publishes release"| node_gradeevent
node_gradeevent -->|"publishes event"| node_kafka
node_kafka -->|"delivers events"| node_notifications
node_notifications -->|"sends email"| node_email
node_admin -->|"reads/writes metrics"| node_metricsdb
node_gateway -.->|"uses discovery"| node_discovery
node_auth -.->|"loads configuration"| node_config
node_classes -.->|"loads configuration"| node_config
node_exam -.->|"loads configuration"| node_config

click node_gateway "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-api-gateway/src/main/java/lk/ijse/examsy/gateway/config/GatewayRoutesConfig.java"
click node_auth "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/service/impl/AuthServiceImpl.java"
click node_authdb "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/repository/UserAccountRepo.java"
click node_authproducer "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/kafka/AuthEventProducer.java"
click node_classes "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/service/impl/StudentClassServiceImpl.java"
click node_classdb "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/repository/CourseRepo.java"
click node_exam "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/service/impl/StudentExamServiceImpl.java"
click node_examdb "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/repository/ExamSubmissionRepo.java"
click node_submissionevent "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/kafka/ExamEventProducer.java"
click node_grading "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/service/impl/SmartGradingServiceImpl.java"
click node_ocr "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/service/impl/OCRServiceImpl.java"
click node_gradeevent "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/kafka/GradeEventProducer.java"
click node_profile "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-profile-service/src/main/java/lk/ijse/examsy/profile/kafka/AuthEventConsumer.java"
click node_profiledb "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-profile-service/src/main/java/lk/ijse/examsy/profile/repository/StudentRepo.java"
click node_admin "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-admin-service/src/main/java/lk/ijse/examsy/adminservice/service/impl/AdminReportServiceImpl.java"
click node_metricsdb "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-admin-service/src/main/java/lk/ijse/examsy/adminservice/repository/PlatformMetricRepo.java"
click node_notifications "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-notification-service/src/main/java/lk/ijse/examsy/notificationservice/service/impl/NotificationServiceImpl.java"
click node_email "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-notification-service/src/main/java/lk/ijse/examsy/notificationservice/service/impl/EmailServiceImpl.java"
click node_discovery "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-eureka-server/src/main/java/lk/ijse/examsy/eurekaserver/ExamsyEurekaServerApplication.java"
click node_config "https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-config-server/src/main/java/lk/ijse/examsy/configserver/ExamsyConfigServerApplication.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_gateway,node_auth,node_authdb,node_authproducer toneBlue
class node_classes,node_classdb,node_exam,node_examdb toneAmber
class node_submissionevent,node_grading,node_ocr,node_gradeevent toneMint
class node_profile,node_profiledb,node_admin,node_metricsdb,node_notifications,node_email toneRose
class node_kafka,node_discovery,node_config,node_user toneIndigo
```

## Components

### Entry and identity

- [API gateway](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-api-gateway/src/main/java/lk/ijse/examsy/gateway/config/GatewayRoutesConfig.java): `services/examsy-api-gateway/src/main/java/lk/ijse/examsy/gateway/config/GatewayRoutesConfig.java`
- [Authentication](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/service/impl/AuthServiceImpl.java): `services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/service/impl/AuthServiceImpl.java`
- [User accounts](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/repository/UserAccountRepo.java): `services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/repository/UserAccountRepo.java`
- [Registration events](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/kafka/AuthEventProducer.java): `services/examsy-auth-service/src/main/java/lk/ijse/examsy/auth/kafka/AuthEventProducer.java`

### Classes and exams

- [Class management](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/service/impl/StudentClassServiceImpl.java): `services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/service/impl/StudentClassServiceImpl.java`
- [Class records](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/repository/CourseRepo.java): `services/examsy-class-service/src/main/java/lk/ijse/examsy/classservice/repository/CourseRepo.java`
- [Exam lifecycle](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/service/impl/StudentExamServiceImpl.java): `services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/service/impl/StudentExamServiceImpl.java`
- [Exams and submissions](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/repository/ExamSubmissionRepo.java): `services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/repository/ExamSubmissionRepo.java`

### Grading and results

- [Submission event](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/kafka/ExamEventProducer.java): `services/examsy-exam-service/src/main/java/lk/ijse/examsy/examservice/kafka/ExamEventProducer.java`
- [Smart grading](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/service/impl/SmartGradingServiceImpl.java): `services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/service/impl/SmartGradingServiceImpl.java`
- [Answer OCR](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/service/impl/OCRServiceImpl.java): `services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/service/impl/OCRServiceImpl.java`
- [Grade release event](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/kafka/GradeEventProducer.java): `services/examsy-grading-service/src/main/java/lk/ijse/examsy/gradingservice/kafka/GradeEventProducer.java`

### Profiles and administration

- [User profiles](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-profile-service/src/main/java/lk/ijse/examsy/profile/kafka/AuthEventConsumer.java): `services/examsy-profile-service/src/main/java/lk/ijse/examsy/profile/kafka/AuthEventConsumer.java`
- [Profile records](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-profile-service/src/main/java/lk/ijse/examsy/profile/repository/StudentRepo.java): `services/examsy-profile-service/src/main/java/lk/ijse/examsy/profile/repository/StudentRepo.java`
- [Reports and dashboard](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-admin-service/src/main/java/lk/ijse/examsy/adminservice/service/impl/AdminReportServiceImpl.java): `services/examsy-admin-service/src/main/java/lk/ijse/examsy/adminservice/service/impl/AdminReportServiceImpl.java`
- [Platform metrics](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-admin-service/src/main/java/lk/ijse/examsy/adminservice/repository/PlatformMetricRepo.java): `services/examsy-admin-service/src/main/java/lk/ijse/examsy/adminservice/repository/PlatformMetricRepo.java`
- [Notifications](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-notification-service/src/main/java/lk/ijse/examsy/notificationservice/service/impl/NotificationServiceImpl.java): `services/examsy-notification-service/src/main/java/lk/ijse/examsy/notificationservice/service/impl/NotificationServiceImpl.java`
- [Email delivery](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-notification-service/src/main/java/lk/ijse/examsy/notificationservice/service/impl/EmailServiceImpl.java): `services/examsy-notification-service/src/main/java/lk/ijse/examsy/notificationservice/service/impl/EmailServiceImpl.java`

### Platform services

- **Kafka broker**
- [Service discovery](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-eureka-server/src/main/java/lk/ijse/examsy/eurekaserver/ExamsyEurekaServerApplication.java): `services/examsy-eureka-server/src/main/java/lk/ijse/examsy/eurekaserver/ExamsyEurekaServerApplication.java`
- [Central configuration](https://github.com/ruvinda-shaluka/examsy-microservice/blob/main/services/examsy-config-server/src/main/java/lk/ijse/examsy/configserver/ExamsyConfigServerApplication.java): `services/examsy-config-server/src/main/java/lk/ijse/examsy/configserver/ExamsyConfigServerApplication.java`

### Other components

- **Student / teacher / admin**

## Connections

- Student / teacher / admin → API gateway: sends requests
- API gateway → Authentication: routes requests
- API gateway → Class management: routes requests
- API gateway → Exam lifecycle: routes requests
- API gateway → Reports and dashboard: routes requests
- Authentication → User accounts: reads/writes
- Authentication → Registration events: publishes registration
- Registration events → Kafka broker: publishes events
- Kafka broker → User profiles: delivers registration
- User profiles → Profile records: writes profiles
- Class management → Class records: reads/writes
- Exam lifecycle → Exams and submissions: reads/writes
- Exam lifecycle → Submission event: publishes submission
- Submission event → Kafka broker: publishes event
- Kafka broker → Smart grading: delivers submission
- Smart grading → Answer OCR: extracts answers
- Smart grading → Grade release event: publishes release
- Grade release event → Kafka broker: publishes event
- Kafka broker → Notifications: delivers events
- Notifications → Email delivery: sends email
- Reports and dashboard → Platform metrics: reads/writes metrics
- API gateway → Service discovery: uses discovery
- Authentication → Central configuration: loads configuration
- Class management → Central configuration: loads configuration
- Exam lifecycle → Central configuration: loads configuration
