# nassimnasr/coursee-registration architecture

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

- Interactive diagram: https://gitdiagram.com/nassimnasr/coursee-registration
- Repository: https://github.com/nassimnasr/coursee-registration

## Overview

Course Registration System supports student and registrar workflows through server-rendered web pages and a JWT-protected REST API. Students authenticate, browse courses and sections, register or join waitlists, and view or drop registrations; registration applies prerequisite, schedule, and capacity rules with section locking. Registrars manage courses and sections. README documents event-driven email notifications; their wiring is shown at the documented level because listener and integration source was not sampled. Authentication and management internals are included; database configuration is identified from the tree.

Main entry points: [`src/main/java/com/nasr/repository`](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/repository) (JPA repositories), [`src/main/java/com/nasr/controller/web`](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/controller/web) (Web controllers), [`src/main/java/com/nasr/controller/api`](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/controller/api) (REST controllers), [`src/main/java/com/nasr/service/RegistrationService.java`](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/service/RegistrationService.java) (Registration rules)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry"]
  node_web["Web controllers"]
  node_webpages["Thymeleaf pages"]
  node_api["REST controllers"]
end

subgraph group_identity["Identity and security"]
  node_websecurity["Session security"]
  node_jwtfilter["JWT filter"]
  node_jwt["JWT utilities<br/>[JwtUtil.java]"]
  node_userdetails["User details"]
  node_userservice["User service<br/>[UserService.java]"]
end

subgraph group_registration["Registration domain"]
  node_registration["Registration rules"]
  node_repositories["JPA repositories"]
  node_models["Domain entities"]
  node_database[("H2 database<br/>[application.yml]")]
end

subgraph group_catalog["Catalog management"]
  node_coursemanage["Course management"]
end

subgraph group_notifications["Notifications"]
  node_events["Registration events"]
  node_listener["Event listener"]
  node_gateway["Email gateway"]
  node_adapter["Email adapter"]
end

node_student(("Student / registrar"))
node_email(("Email service"))

node_student -->|"uses web UI"| node_web
node_student -->|"calls REST"| node_api
node_web -->|"secured by"| node_websecurity
node_websecurity -->|"renders"| node_webpages
node_api -->|"secured by"| node_jwtfilter
node_jwtfilter -->|"validates tokens"| node_jwt
node_jwtfilter -->|"loads identity"| node_userdetails
node_userdetails -->|"reads users"| node_repositories
node_api -->|"authenticates or registers"| node_userservice
node_userservice -->|"reads and writes users"| node_repositories
node_api -->|"registers, drops, queries"| node_registration
node_web -->|"registers and queries"| node_registration
node_registration -->|"reads and writes"| node_repositories
node_coursemanage -->|"manages catalog"| node_repositories
node_web -->|"manages courses and sections"| node_coursemanage
node_repositories -->|"persists entities"| node_database
node_registration -->|"publishes outcomes"| node_events
node_events -->|"dispatches events"| node_listener
node_listener -->|"sends notifications"| node_gateway
node_gateway -->|"routes messages"| node_adapter
node_adapter -.->|"delivers email"| node_email

click node_web "https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/controller/web"
click node_webpages "https://github.com/nassimnasr/coursee-registration/tree/master/src/main/resources/templates"
click node_api "https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/controller/api"
click node_websecurity "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/SecurityConfig.java"
click node_jwtfilter "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/JwtAuthenticationFilter.java"
click node_jwt "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/JwtUtil.java"
click node_userdetails "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/CustomUserDetailsService.java"
click node_userservice "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/service/UserService.java"
click node_registration "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/service/RegistrationService.java"
click node_coursemanage "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/service/CourseManagementService.java"
click node_repositories "https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/repository"
click node_models "https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/model"
click node_database "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/resources/application.yml"
click node_events "https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/event"
click node_listener "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/integration/RegistrationEventListener.java"
click node_gateway "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/integration/EmailNotificationGateway.java"
click node_adapter "https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/integration/LoggingEmailAdapter.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_web,node_webpages,node_api toneBlue
class node_websecurity,node_jwtfilter,node_jwt,node_userdetails,node_userservice toneAmber
class node_registration,node_repositories,node_models,node_database toneMint
class node_coursemanage toneRose
class node_events,node_listener,node_gateway,node_adapter,node_student,node_email toneIndigo
```

## Components

### User entry

- [Web controllers](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/controller/web): `src/main/java/com/nasr/controller/web`
- [Thymeleaf pages](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/resources/templates): `src/main/resources/templates`
- [REST controllers](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/controller/api): `src/main/java/com/nasr/controller/api`

### Identity and security

- [Session security](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/SecurityConfig.java): `src/main/java/com/nasr/security/SecurityConfig.java`
- [JWT filter](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/JwtAuthenticationFilter.java): `src/main/java/com/nasr/security/JwtAuthenticationFilter.java`
- [JWT utilities](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/JwtUtil.java): `src/main/java/com/nasr/security/JwtUtil.java`
- [User details](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/security/CustomUserDetailsService.java): `src/main/java/com/nasr/security/CustomUserDetailsService.java`
- [User service](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/service/UserService.java): `src/main/java/com/nasr/service/UserService.java`

### Registration domain

- [Registration rules](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/service/RegistrationService.java): `src/main/java/com/nasr/service/RegistrationService.java`
- [JPA repositories](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/repository): `src/main/java/com/nasr/repository`
- [Domain entities](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/model): `src/main/java/com/nasr/model`
- [H2 database](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/resources/application.yml): `src/main/resources/application.yml`

### Catalog management

- [Course management](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/service/CourseManagementService.java): `src/main/java/com/nasr/service/CourseManagementService.java`

### Notifications

- [Registration events](https://github.com/nassimnasr/coursee-registration/tree/master/src/main/java/com/nasr/event): `src/main/java/com/nasr/event`
- [Event listener](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/integration/RegistrationEventListener.java): `src/main/java/com/nasr/integration/RegistrationEventListener.java`
- [Email gateway](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/integration/EmailNotificationGateway.java): `src/main/java/com/nasr/integration/EmailNotificationGateway.java`
- [Email adapter](https://github.com/nassimnasr/coursee-registration/blob/master/src/main/java/com/nasr/integration/LoggingEmailAdapter.java): `src/main/java/com/nasr/integration/LoggingEmailAdapter.java`

### Other components

- **Student / registrar**
- **Email service**

## Connections

- Student / registrar → Web controllers: uses web UI
- Student / registrar → REST controllers: calls REST
- Web controllers → Session security: secured by
- Session security → Thymeleaf pages: renders
- REST controllers → JWT filter: secured by
- JWT filter → JWT utilities: validates tokens
- JWT filter → User details: loads identity
- User details → JPA repositories: reads users
- REST controllers → User service: authenticates or registers
- User service → JPA repositories: reads and writes users
- REST controllers → Registration rules: registers, drops, queries
- Web controllers → Registration rules: registers and queries
- Registration rules → JPA repositories: reads and writes
- Course management → JPA repositories: manages catalog
- Web controllers → Course management: manages courses and sections
- JPA repositories → H2 database: persists entities
- Registration rules → Registration events: publishes outcomes
- Registration events → Event listener: dispatches events
- Event listener → Email gateway: sends notifications
- Email gateway → Email adapter: routes messages
- Email adapter → Email service: delivers email
