# kugelblitz84/edu_app_backend architecture

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

## Overview

Edu App Backend is a feature-first NestJS API for identity and institution workflows, exam administration and delivery, and global institution review. Users and administrators enter through HTTP endpoints; controllers validate requests and delegate to feature use cases. The exam workflow spans exam setup and invitations, discovery/access, and live attempts through recovery, submission, grading, and results. Authentication provides login, registration, password reset, and session management. The tree and README establish additional capabilities, but sampled implementation excerpts are limited; uncertain internal repository and integration wiring is omitted.

Main entry points: [`src/features/exams/exam-live/presentation/live-exam.controller.ts`](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/presentation/live-exam.controller.ts) (Attempt API), [`src/core/auth/services/session.service.ts`](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/auth/services/session.service.ts) (Session service), [`src/features/auth/register/presentation/controllers/register.controller.ts`](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/register/presentation/controllers/register.controller.ts) (Registration API), [`src/features/auth/pass-reset/presentation/controllers/pass-reset.controller.ts`](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/pass-reset/presentation/controllers/pass-reset.controller.ts) (Password reset API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity"]
  node_login["Login API"]
  node_login_usecase["Login use case<br/>[login.usecase.ts]"]
  node_registration["Registration API"]
  node_register_user["User registration"]
  node_register_institution["Institution registration"]
  node_reset_api["Password reset API"]
  node_reset_usecase["Password reset"]
  node_core_auth_api["Session API<br/>[auth.controller.ts]"]
  node_session["Session service<br/>[session.service.ts]"]
  node_access_tokens["Access tokens"]
  node_profile_api["User profile API"]
end

subgraph group_exams["Exam workflows"]
  node_admin_exam_api["Exam administration API"]
  node_exam_usecases["Exam management<br/>[exam.usecases.ts]"]
  node_invitation_usecases["Exam invitations"]
  node_user_exam_api["Exam catalog API<br/>[exam.controller.ts]"]
  node_user_exam_cases["Catalog and access"]
  node_attempt_api["Attempt API"]
  node_start_api["Start attempt API"]
  node_start_attempt["Start attempt"]
  node_recover_attempt["Recover attempt"]
  node_submit_attempt["Submit attempt"]
  node_grade_attempt["Grade attempt"]
  node_attempt_result["Attempt results"]
  node_realtime["Live exam gateway"]
  node_socket_auth["Socket authentication"]
end

subgraph group_governance["Institution governance"]
  node_global_admin_api["Institution review API"]
  node_global_admin_cases["Institution review<br/>[usecases.ts]"]
end

subgraph group_platform["Platform services"]
  node_prisma[("Prisma database<br/>[prisma.service.ts]")]
  node_health_api["Health endpoint"]
  node_health_service["Health service<br/>[health.service.ts]"]
end

node_client(("API client"))

node_client -->|"submits login"| node_login
node_login -->|"executes login"| node_login_usecase
node_client -->|"registers"| node_registration
node_registration -->|"creates user"| node_register_user
node_registration -->|"creates institution"| node_register_institution
node_client -->|"requests reset"| node_reset_api
node_reset_api -->|"handles reset"| node_reset_usecase
node_reset_api -->|"deletes sessions"| node_session
node_client -->|"refreshes or logs out"| node_core_auth_api
node_core_auth_api -->|"rotates or revokes"| node_session
node_session -->|"reads and writes sessions"| node_prisma
node_session -->|"generates tokens"| node_access_tokens
node_client -->|"manages exams"| node_admin_exam_api
node_admin_exam_api -->|"manages exam"| node_exam_usecases
node_admin_exam_api -->|"generates invitations"| node_invitation_usecases
node_client -->|"browses or requests access"| node_user_exam_api
node_user_exam_api -->|"queries or authorizes"| node_user_exam_cases
node_client -->|"starts attempt"| node_start_api
node_start_api -->|"starts attempt"| node_start_attempt
node_client -->|"recovers, submits, views result"| node_attempt_api
node_attempt_api -->|"recovers attempt"| node_recover_attempt
node_attempt_api -->|"submits attempt"| node_submit_attempt
node_attempt_api -->|"gets result"| node_attempt_result
node_client -->|"connects live"| node_realtime
node_realtime -->|"authenticates socket"| node_socket_auth
node_client -->|"reviews institutions"| node_global_admin_api
node_global_admin_api -->|"lists or decides"| node_global_admin_cases
node_client -->|"checks health"| node_health_api
node_health_api -->|"checks status"| node_health_service

click node_login "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/login/presentation/login.controller.ts"
click node_login_usecase "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/login/domain/usecases/login.usecase.ts"
click node_registration "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/register/presentation/controllers/register.controller.ts"
click node_register_user "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/register/domain/use-cases/register-user.use-case.ts"
click node_register_institution "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/register/domain/use-cases/register-institution.use-case.ts"
click node_reset_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/pass-reset/presentation/controllers/pass-reset.controller.ts"
click node_reset_usecase "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/pass-reset/domain/use-cases/pass-reset.usecase.ts"
click node_core_auth_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/auth/auth.controller.ts"
click node_session "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/auth/services/session.service.ts"
click node_access_tokens "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/auth/services/access-token.service.ts"
click node_prisma "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/database/prisma.service.ts"
click node_admin_exam_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/admin-exam/presentation/exam.controllers.ts"
click node_exam_usecases "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/admin-exam/domain/exam.usecases.ts"
click node_invitation_usecases "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/admin-exam/domain/exam-invitation.usecases.ts"
click node_user_exam_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/user-exam/presentation/exam.controller.ts"
click node_user_exam_cases "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/user-exam/domain/user-exam.usecases.ts"
click node_attempt_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/presentation/live-exam.controller.ts"
click node_start_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/presentation/live-exam.controller.ts"
click node_start_attempt "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/start-attempt.usecase.ts"
click node_recover_attempt "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/recover-attempt.usecase.ts"
click node_submit_attempt "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/submit-attempt.usecase.ts"
click node_grade_attempt "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/grade-attempt.usecase.ts"
click node_attempt_result "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/get-attempt-result.usecase.ts"
click node_realtime "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/realtime/live-exam.gateway.ts"
click node_socket_auth "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/realtime/socket-auth.service.ts"
click node_global_admin_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/global_admin/presentation/global-admin.controller.ts"
click node_global_admin_cases "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/global_admin/domain/usecases.ts"
click node_health_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/health/health.controller.ts"
click node_health_service "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/health/health.service.ts"
click node_profile_api "https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/user-profile/presentation/profile.controller.ts"

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_login,node_login_usecase,node_registration,node_register_user,node_register_institution,node_reset_api,node_reset_usecase,node_core_auth_api,node_session,node_access_tokens,node_profile_api,node_client toneBlue
class node_admin_exam_api,node_exam_usecases,node_invitation_usecases,node_user_exam_api,node_user_exam_cases,node_attempt_api,node_start_api,node_start_attempt,node_recover_attempt,node_submit_attempt,node_grade_attempt,node_attempt_result,node_realtime,node_socket_auth toneAmber
class node_global_admin_api,node_global_admin_cases toneMint
class node_prisma,node_health_api,node_health_service toneRose
```

## Components

### Identity

- [Login API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/login/presentation/login.controller.ts): `src/features/auth/login/presentation/login.controller.ts`
- [Login use case](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/login/domain/usecases/login.usecase.ts): `src/features/auth/login/domain/usecases/login.usecase.ts`
- [Registration API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/register/presentation/controllers/register.controller.ts): `src/features/auth/register/presentation/controllers/register.controller.ts`
- [User registration](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/register/domain/use-cases/register-user.use-case.ts): `src/features/auth/register/domain/use-cases/register-user.use-case.ts`
- [Institution registration](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/register/domain/use-cases/register-institution.use-case.ts): `src/features/auth/register/domain/use-cases/register-institution.use-case.ts`
- [Password reset API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/pass-reset/presentation/controllers/pass-reset.controller.ts): `src/features/auth/pass-reset/presentation/controllers/pass-reset.controller.ts`
- [Password reset](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/auth/pass-reset/domain/use-cases/pass-reset.usecase.ts): `src/features/auth/pass-reset/domain/use-cases/pass-reset.usecase.ts`
- [Session API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/auth/auth.controller.ts): `src/core/auth/auth.controller.ts`
- [Session service](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/auth/services/session.service.ts): `src/core/auth/services/session.service.ts`
- [Access tokens](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/auth/services/access-token.service.ts): `src/core/auth/services/access-token.service.ts`
- [User profile API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/user-profile/presentation/profile.controller.ts): `src/features/user-profile/presentation/profile.controller.ts`

### Exam workflows

- [Exam administration API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/admin-exam/presentation/exam.controllers.ts): `src/features/exams/admin-exam/presentation/exam.controllers.ts`
- [Exam management](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/admin-exam/domain/exam.usecases.ts): `src/features/exams/admin-exam/domain/exam.usecases.ts`
- [Exam invitations](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/admin-exam/domain/exam-invitation.usecases.ts): `src/features/exams/admin-exam/domain/exam-invitation.usecases.ts`
- [Exam catalog API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/user-exam/presentation/exam.controller.ts): `src/features/exams/user-exam/presentation/exam.controller.ts`
- [Catalog and access](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/user-exam/domain/user-exam.usecases.ts): `src/features/exams/user-exam/domain/user-exam.usecases.ts`
- [Attempt API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/presentation/live-exam.controller.ts): `src/features/exams/exam-live/presentation/live-exam.controller.ts`
- [Start attempt API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/presentation/live-exam.controller.ts): `src/features/exams/exam-live/presentation/live-exam.controller.ts`
- [Start attempt](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/start-attempt.usecase.ts): `src/features/exams/exam-live/domain/usecases/start-attempt.usecase.ts`
- [Recover attempt](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/recover-attempt.usecase.ts): `src/features/exams/exam-live/domain/usecases/recover-attempt.usecase.ts`
- [Submit attempt](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/submit-attempt.usecase.ts): `src/features/exams/exam-live/domain/usecases/submit-attempt.usecase.ts`
- [Grade attempt](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/grade-attempt.usecase.ts): `src/features/exams/exam-live/domain/usecases/grade-attempt.usecase.ts`
- [Attempt results](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/domain/usecases/get-attempt-result.usecase.ts): `src/features/exams/exam-live/domain/usecases/get-attempt-result.usecase.ts`
- [Live exam gateway](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/realtime/live-exam.gateway.ts): `src/features/exams/exam-live/realtime/live-exam.gateway.ts`
- [Socket authentication](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/exams/exam-live/realtime/socket-auth.service.ts): `src/features/exams/exam-live/realtime/socket-auth.service.ts`

### Institution governance

- [Institution review API](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/global_admin/presentation/global-admin.controller.ts): `src/features/global_admin/presentation/global-admin.controller.ts`
- [Institution review](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/global_admin/domain/usecases.ts): `src/features/global_admin/domain/usecases.ts`

### Platform services

- [Prisma database](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/core/database/prisma.service.ts): `src/core/database/prisma.service.ts`
- [Health endpoint](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/health/health.controller.ts): `src/features/health/health.controller.ts`
- [Health service](https://github.com/kugelblitz84/edu_app_backend/blob/master/src/features/health/health.service.ts): `src/features/health/health.service.ts`

### Other components

- **API client**

## Connections

- API client → Login API: submits login
- Login API → Login use case: executes login
- API client → Registration API: registers
- Registration API → User registration: creates user
- Registration API → Institution registration: creates institution
- API client → Password reset API: requests reset
- Password reset API → Password reset: handles reset
- Password reset API → Session service: deletes sessions
- API client → Session API: refreshes or logs out
- Session API → Session service: rotates or revokes
- Session service → Prisma database: reads and writes sessions
- Session service → Access tokens: generates tokens
- API client → Exam administration API: manages exams
- Exam administration API → Exam management: manages exam
- Exam administration API → Exam invitations: generates invitations
- API client → Exam catalog API: browses or requests access
- Exam catalog API → Catalog and access: queries or authorizes
- API client → Start attempt API: starts attempt
- Start attempt API → Start attempt: starts attempt
- API client → Attempt API: recovers, submits, views result
- Attempt API → Recover attempt: recovers attempt
- Attempt API → Submit attempt: submits attempt
- Attempt API → Attempt results: gets result
- API client → Live exam gateway: connects live
- Live exam gateway → Socket authentication: authenticates socket
- API client → Institution review API: reviews institutions
- Institution review API → Institution review: lists or decides
- API client → Health endpoint: checks health
- Health endpoint → Health service: checks status
