# brkybzkrt/student-course-registration architecture

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

- Interactive diagram: https://gitdiagram.com/brkybzkrt/student-course-registration
- Repository: https://github.com/brkybzkrt/student-course-registration

## Overview

This is a Spring microservice system for managing students, courses, course-registration approval, and email notifications. The main workflow is a student submitting a five-course selection; registration checks eligibility and course availability, stores grouped registrations, and exposes them for administrator approval. Approval updates registration state and emits enrolled-student updates consumed by the course service. Separate services manage student, course, and administrator records. Notification delivery also includes scheduled pending-registration reminders and failed-email retries. The README documents Keycloak security; source excerpts do not establish how every service wires the shared security module or all event producers.

Main entry points: [`registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationService.java`](https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationService.java) (Registration service), [`notification-service/src/main/java/com/student/course/registration/service/ScheduleService.java`](https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/service/ScheduleService.java) (Reminder scheduler), [`student-service/src/main/java/com/student/course/registration/service/impl/StudentService.java`](https://github.com/brkybzkrt/student-course-registration/blob/master/student-service/src/main/java/com/student/course/registration/service/impl/StudentService.java) (Student service), [`admin-service/src/main/java/com/student/course/registration/service/impl/AdminService.java`](https://github.com/brkybzkrt/student-course-registration/blob/master/admin-service/src/main/java/com/student/course/registration/service/impl/AdminService.java) (Admin service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_management["Record management"]
  node_student["Student API"]
  node_studentlogic["Student service"]
  node_studentrepo["Student repository"]
  node_course["Course API"]
  node_courselogic["Course service<br/>[CourseService.java]"]
  node_courserepo["Course repository"]
  node_admin["Admin API"]
  node_adminlogic["Admin service<br/>[AdminService.java]"]
  node_adminrepo["Admin repository"]
end

subgraph group_registration["Registration workflow"]
  node_registrationapi["Registration API"]
  node_registrationlogic["Registration service"]
  node_registrationrepo["Registration repository"]
  node_studentclient["Student client"]
  node_courseclient["Course client"]
  node_producer["Enrollment producer"]
  node_courselistener["Enrollment listener"]
end

subgraph group_notifications["Notifications"]
  node_schedule["Reminder scheduler"]
  node_registrationclient["Registration client"]
  node_adminclient["Admin client"]
  node_kafkanotification["Email event handler"]
  node_email["Email service<br/>[EmailService.java]"]
  node_failedrepo[("Failed email store")]
end

subgraph group_shared["Shared capabilities"]
  node_auth["Keycloak security"]
end

subgraph group_integrations["External systems"]
  node_kafka["Kafka"]
  node_keycloak["Keycloak"]
  node_mail["Mail transport"]
end

node_actor(("Users and admins"))

node_actor -->|"manages account"| node_student
node_actor -->|"manages courses"| node_course
node_actor -->|"manages admins"| node_admin
node_actor -->|"submits or reviews"| node_registrationapi
node_student -->|"delegates"| node_studentlogic
node_studentlogic -->|"reads and writes"| node_studentrepo
node_studentlogic -.->|"authenticates and provisions"| node_keycloak
node_auth -.->|"validates identity"| node_keycloak
node_course -->|"delegates"| node_courselogic
node_courselogic -->|"reads and writes"| node_courserepo
node_admin -->|"delegates"| node_adminlogic
node_adminlogic -->|"reads and writes"| node_adminrepo
node_adminlogic -.->|"authenticates and provisions"| node_keycloak
node_registrationapi -->|"delegates"| node_registrationlogic
node_registrationlogic -->|"checks eligibility"| node_studentclient
node_registrationlogic -->|"checks selected courses"| node_courseclient
node_registrationlogic -->|"reads and writes groups"| node_registrationrepo
node_registrationlogic -->|"requests enrollment update"| node_producer
node_producer -->|"publishes update"| node_kafka
node_kafka -->|"delivers update"| node_courselistener
node_schedule -->|"fetches pending groups"| node_registrationclient
node_schedule -->|"fetches admins"| node_adminclient
node_schedule -->|"sends reminders"| node_email
node_kafka -->|"delivers email events"| node_kafkanotification
node_kafkanotification -->|"sends email"| node_email
node_kafkanotification -->|"stores and retries failures"| node_failedrepo
node_email -->|"sends messages"| node_mail

click node_student "https://github.com/brkybzkrt/student-course-registration/blob/master/student-service/src/main/java/com/student/course/registration/controller/impl/StudentController.java"
click node_studentlogic "https://github.com/brkybzkrt/student-course-registration/blob/master/student-service/src/main/java/com/student/course/registration/service/impl/StudentService.java"
click node_studentrepo "https://github.com/brkybzkrt/student-course-registration/blob/master/student-service/src/main/java/com/student/course/registration/repository/StudentRepository.java"
click node_course "https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/controller/impl/CourseController.java"
click node_courselogic "https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/service/impl/CourseService.java"
click node_courserepo "https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/repository/CourseRepository.java"
click node_admin "https://github.com/brkybzkrt/student-course-registration/blob/master/admin-service/src/main/java/com/student/course/registration/controller/impl/AdminController.java"
click node_adminlogic "https://github.com/brkybzkrt/student-course-registration/blob/master/admin-service/src/main/java/com/student/course/registration/service/impl/AdminService.java"
click node_adminrepo "https://github.com/brkybzkrt/student-course-registration/blob/master/admin-service/src/main/java/com/student/course/registration/repository/AdminRepository.java"
click node_registrationapi "https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/controller/impl/RegistrationController.java"
click node_registrationlogic "https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationService.java"
click node_registrationrepo "https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/repository/RegistrationRepository.java"
click node_studentclient "https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/feingClients/StudentFeignClient.java"
click node_courseclient "https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/feingClients/CourseFeignClient.java"
click node_producer "https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationServiceProducer.java"
click node_courselistener "https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/service/impl/CourseListener.java"
click node_schedule "https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/service/ScheduleService.java"
click node_registrationclient "https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/feignClients/RegistrationFeignClient.java"
click node_adminclient "https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/feignClients/AdminFeignClient.java"
click node_kafkanotification "https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/service/KafkaNotificationService.java"
click node_email "https://github.com/brkybzkrt/student-course-registration/blob/master/common-modules/email-common/src/main/java/com/student/course/registration/emailcommon/service/EmailService.java"
click node_failedrepo "https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/repository/FailedEmailRepository.java"
click node_auth "https://github.com/brkybzkrt/student-course-registration/blob/master/common-modules/auth-common/src/main/java/com/student/course/registration/authcommon/config/KeycloakConfiguration.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_student,node_studentlogic,node_studentrepo,node_course,node_courselogic,node_courserepo,node_admin,node_adminlogic,node_adminrepo,node_actor toneBlue
class node_registrationapi,node_registrationlogic,node_registrationrepo,node_studentclient,node_courseclient,node_producer,node_courselistener toneAmber
class node_schedule,node_registrationclient,node_adminclient,node_kafkanotification,node_email,node_failedrepo toneMint
class node_auth toneRose
class node_kafka,node_keycloak,node_mail toneIndigo
```

## Components

### Record management

- [Student API](https://github.com/brkybzkrt/student-course-registration/blob/master/student-service/src/main/java/com/student/course/registration/controller/impl/StudentController.java): `student-service/src/main/java/com/student/course/registration/controller/impl/StudentController.java`
- [Student service](https://github.com/brkybzkrt/student-course-registration/blob/master/student-service/src/main/java/com/student/course/registration/service/impl/StudentService.java): `student-service/src/main/java/com/student/course/registration/service/impl/StudentService.java`
- [Student repository](https://github.com/brkybzkrt/student-course-registration/blob/master/student-service/src/main/java/com/student/course/registration/repository/StudentRepository.java): `student-service/src/main/java/com/student/course/registration/repository/StudentRepository.java`
- [Course API](https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/controller/impl/CourseController.java): `course-service/src/main/java/com/student/course/registration/controller/impl/CourseController.java`
- [Course service](https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/service/impl/CourseService.java): `course-service/src/main/java/com/student/course/registration/service/impl/CourseService.java`
- [Course repository](https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/repository/CourseRepository.java): `course-service/src/main/java/com/student/course/registration/repository/CourseRepository.java`
- [Admin API](https://github.com/brkybzkrt/student-course-registration/blob/master/admin-service/src/main/java/com/student/course/registration/controller/impl/AdminController.java): `admin-service/src/main/java/com/student/course/registration/controller/impl/AdminController.java`
- [Admin service](https://github.com/brkybzkrt/student-course-registration/blob/master/admin-service/src/main/java/com/student/course/registration/service/impl/AdminService.java): `admin-service/src/main/java/com/student/course/registration/service/impl/AdminService.java`
- [Admin repository](https://github.com/brkybzkrt/student-course-registration/blob/master/admin-service/src/main/java/com/student/course/registration/repository/AdminRepository.java): `admin-service/src/main/java/com/student/course/registration/repository/AdminRepository.java`

### Registration workflow

- [Registration API](https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/controller/impl/RegistrationController.java): `registration-service/src/main/java/com/student/course/registration/controller/impl/RegistrationController.java`
- [Registration service](https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationService.java): `registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationService.java`
- [Registration repository](https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/repository/RegistrationRepository.java): `registration-service/src/main/java/com/student/course/registration/repository/RegistrationRepository.java`
- [Student client](https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/feingClients/StudentFeignClient.java): `registration-service/src/main/java/com/student/course/registration/feingClients/StudentFeignClient.java`
- [Course client](https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/feingClients/CourseFeignClient.java): `registration-service/src/main/java/com/student/course/registration/feingClients/CourseFeignClient.java`
- [Enrollment producer](https://github.com/brkybzkrt/student-course-registration/blob/master/registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationServiceProducer.java): `registration-service/src/main/java/com/student/course/registration/service/impl/RegistrationServiceProducer.java`
- [Enrollment listener](https://github.com/brkybzkrt/student-course-registration/blob/master/course-service/src/main/java/com/student/course/registration/service/impl/CourseListener.java): `course-service/src/main/java/com/student/course/registration/service/impl/CourseListener.java`

### Notifications

- [Reminder scheduler](https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/service/ScheduleService.java): `notification-service/src/main/java/com/student/course/registration/service/ScheduleService.java`
- [Registration client](https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/feignClients/RegistrationFeignClient.java): `notification-service/src/main/java/com/student/course/registration/feignClients/RegistrationFeignClient.java`
- [Admin client](https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/feignClients/AdminFeignClient.java): `notification-service/src/main/java/com/student/course/registration/feignClients/AdminFeignClient.java`
- [Email event handler](https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/service/KafkaNotificationService.java): `notification-service/src/main/java/com/student/course/registration/service/KafkaNotificationService.java`
- [Email service](https://github.com/brkybzkrt/student-course-registration/blob/master/common-modules/email-common/src/main/java/com/student/course/registration/emailcommon/service/EmailService.java): `common-modules/email-common/src/main/java/com/student/course/registration/emailcommon/service/EmailService.java`
- [Failed email store](https://github.com/brkybzkrt/student-course-registration/blob/master/notification-service/src/main/java/com/student/course/registration/repository/FailedEmailRepository.java): `notification-service/src/main/java/com/student/course/registration/repository/FailedEmailRepository.java`

### Shared capabilities

- [Keycloak security](https://github.com/brkybzkrt/student-course-registration/blob/master/common-modules/auth-common/src/main/java/com/student/course/registration/authcommon/config/KeycloakConfiguration.java): `common-modules/auth-common/src/main/java/com/student/course/registration/authcommon/config/KeycloakConfiguration.java`

### External systems

- **Kafka**
- **Keycloak**
- **Mail transport**

### Other components

- **Users and admins**

## Connections

- Users and admins → Student API: manages account
- Users and admins → Course API: manages courses
- Users and admins → Admin API: manages admins
- Users and admins → Registration API: submits or reviews
- Student API → Student service: delegates
- Student service → Student repository: reads and writes
- Student service → Keycloak: authenticates and provisions
- Keycloak security → Keycloak: validates identity
- Course API → Course service: delegates
- Course service → Course repository: reads and writes
- Admin API → Admin service: delegates
- Admin service → Admin repository: reads and writes
- Admin service → Keycloak: authenticates and provisions
- Registration API → Registration service: delegates
- Registration service → Student client: checks eligibility
- Registration service → Course client: checks selected courses
- Registration service → Registration repository: reads and writes groups
- Registration service → Enrollment producer: requests enrollment update
- Enrollment producer → Kafka: publishes update
- Kafka → Enrollment listener: delivers update
- Reminder scheduler → Registration client: fetches pending groups
- Reminder scheduler → Admin client: fetches admins
- Reminder scheduler → Email service: sends reminders
- Kafka → Email event handler: delivers email events
- Email event handler → Email service: sends email
- Email event handler → Failed email store: stores and retries failures
- Email service → Mail transport: sends messages
