# sargiseg/exam-manager architecture

> Architecture diagram of the GitHub repository sargiseg/exam-manager, 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/sargiseg/exam-manager
- Repository: https://github.com/sargiseg/exam-manager

## Overview

ExamManager is a Spring-based exam administration API for academic staff and students. Its principal workflow is managing academic structure (departments, groups, subgroups, courses, and people), creating and updating exams, then recording and retrieving exam results. Authentication and session management support secured user-facing operations. The tree shows distinct controller, facade, service, and repository layers; sampled code confirms controller-to-facade calls and session-service persistence, but the README is empty and most implementations were not sampled, so uncertain downstream wiring is omitted.

Main entry points: [`src/main/java/com/exammanager/auth/controller/SignInControllerV1.java`](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/controller/SignInControllerV1.java) (Sign-in API), [`src/main/java/com/exammanager/core/controller`](https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/controller) (Academic APIs), [`src/main/java/com/exammanager/user/controller/UserController.java`](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/controller/UserController.java) (User API), [`src/main/java/com/exammanager/core/controller/ExamController.java`](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/controller/ExamController.java) (Exam API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_auth["Identity and access"]
  node_authapi["Sign-in API"]
  node_signinfacade["Sign-in facade<br/>[SignInFacade.java]"]
  node_sessionsvc["Session service"]
  node_security["JWT security"]
end

subgraph group_academic["Academic structure"]
  node_academicapi["Academic APIs"]
  node_academicfacade["Academic facades"]
  node_peopleapi["User API"]
  node_userfacade["User facade"]
end

subgraph group_assessment["Exams and results"]
  node_examapi["Exam API"]
  node_examfacade["Exam facade<br/>[ExamFacade.java]"]
  node_examservice["Exam service"]
  node_resultservice["Result service"]
end

subgraph group_data["Persistence and services"]
  node_sessionrepo[("Session repository")]
  node_academicservices["Academic services"]
  node_academicrepos[("Academic repositories")]
  node_usersvc["User service"]
  node_userrepo[("User repository")]
  node_examrepo[("Exam data")]
  node_resultrepo[("Result data")]
end

node_staff(("Staff / students"))

node_staff -->|"signs in"| node_authapi
node_authapi -->|"calls"| node_signinfacade
node_sessionsvc -->|"reads / writes"| node_sessionrepo
node_staff -->|"manages records"| node_academicapi
node_academicapi -->|"dispatches"| node_academicfacade
node_staff -->|"views profile"| node_peopleapi
node_peopleapi -->|"calls"| node_userfacade
node_staff -->|"manages exams"| node_examapi
node_examapi -->|"calls"| node_examfacade

click node_authapi "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/controller/SignInControllerV1.java"
click node_signinfacade "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/facade/SignInFacade.java"
click node_sessionsvc "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/service/impl/UserSessionServiceImpl.java"
click node_sessionrepo "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/repository/UserSessionRepository.java"
click node_security "https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/common/security"
click node_academicapi "https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/controller"
click node_academicfacade "https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/facade/impl"
click node_academicservices "https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/service/impl"
click node_academicrepos "https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/repository"
click node_peopleapi "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/controller/UserController.java"
click node_userfacade "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/facade/UserFacadeImpl.java"
click node_usersvc "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/service/impl/UserServiceImpl.java"
click node_userrepo "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/repository/UserRepository.java"
click node_examapi "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/controller/ExamController.java"
click node_examfacade "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/facade/core/ExamFacade.java"
click node_examservice "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/service/impl/ExamServiceImpl.java"
click node_resultservice "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/service/impl/ExamResultServiceImpl.java"
click node_examrepo "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/repository/ExamRepository.java"
click node_resultrepo "https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/repository/ExamResultRepository.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_authapi,node_signinfacade,node_sessionsvc,node_security toneBlue
class node_academicapi,node_academicfacade,node_peopleapi,node_userfacade toneAmber
class node_examapi,node_examfacade,node_examservice,node_resultservice toneMint
class node_sessionrepo,node_academicservices,node_academicrepos,node_usersvc,node_userrepo,node_examrepo,node_resultrepo toneRose
class node_staff toneIndigo
```

## Components

### Identity and access

- [Sign-in API](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/controller/SignInControllerV1.java): `src/main/java/com/exammanager/auth/controller/SignInControllerV1.java`
- [Sign-in facade](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/facade/SignInFacade.java): `src/main/java/com/exammanager/auth/facade/SignInFacade.java`
- [Session service](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/service/impl/UserSessionServiceImpl.java): `src/main/java/com/exammanager/auth/service/impl/UserSessionServiceImpl.java`
- [JWT security](https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/common/security): `src/main/java/com/exammanager/common/security`

### Academic structure

- [Academic APIs](https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/controller): `src/main/java/com/exammanager/core/controller`
- [Academic facades](https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/facade/impl): `src/main/java/com/exammanager/core/facade/impl`
- [User API](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/controller/UserController.java): `src/main/java/com/exammanager/user/controller/UserController.java`
- [User facade](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/facade/UserFacadeImpl.java): `src/main/java/com/exammanager/user/facade/UserFacadeImpl.java`

### Exams and results

- [Exam API](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/controller/ExamController.java): `src/main/java/com/exammanager/core/controller/ExamController.java`
- [Exam facade](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/facade/core/ExamFacade.java): `src/main/java/com/exammanager/core/facade/core/ExamFacade.java`
- [Exam service](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/service/impl/ExamServiceImpl.java): `src/main/java/com/exammanager/core/service/impl/ExamServiceImpl.java`
- [Result service](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/service/impl/ExamResultServiceImpl.java): `src/main/java/com/exammanager/core/service/impl/ExamResultServiceImpl.java`

### Persistence and services

- [Session repository](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/auth/repository/UserSessionRepository.java): `src/main/java/com/exammanager/auth/repository/UserSessionRepository.java`
- [Academic services](https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/service/impl): `src/main/java/com/exammanager/core/service/impl`
- [Academic repositories](https://github.com/sargiseg/exam-manager/tree/main/src/main/java/com/exammanager/core/repository): `src/main/java/com/exammanager/core/repository`
- [User service](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/service/impl/UserServiceImpl.java): `src/main/java/com/exammanager/user/service/impl/UserServiceImpl.java`
- [User repository](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/user/repository/UserRepository.java): `src/main/java/com/exammanager/user/repository/UserRepository.java`
- [Exam data](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/repository/ExamRepository.java): `src/main/java/com/exammanager/core/repository/ExamRepository.java`
- [Result data](https://github.com/sargiseg/exam-manager/blob/main/src/main/java/com/exammanager/core/repository/ExamResultRepository.java): `src/main/java/com/exammanager/core/repository/ExamResultRepository.java`

### Other components

- **Staff / students**

## Connections

- Staff / students → Sign-in API: signs in
- Sign-in API → Sign-in facade: calls
- Session service → Session repository: reads / writes
- Staff / students → Academic APIs: manages records
- Academic APIs → Academic facades: dispatches
- Staff / students → User API: views profile
- User API → User facade: calls
- Staff / students → Exam API: manages exams
- Exam API → Exam facade: calls
