# yuranium/javalab architecture

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

- Interactive diagram: https://gitdiagram.com/yuranium/javalab
- Repository: https://github.com/yuranium/javalab

## Overview

JavaLab is a Java-learning platform: learners browse tasks, work through a task profile, submit Java code, and receive test feedback; accounts, progress tracking, and AI chat support that work. The repository is split into a SolidJS client and Java services for tasks, execution, identity, progress, AI, and notifications, with Kafka event exchange. The sampled code confirms task creation, account confirmation, code compilation/testing, and chat-memory behavior; it does not establish every cross-service route, so uncertain wiring is omitted.

Main entry points: [`java-lab-solidjs/src/components/Tasks/TaskProfile/TaskCodeEditor/TaskCodeEditor.jsx`](https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/components/Tasks/TaskProfile/TaskCodeEditor/TaskCodeEditor.jsx) (Task workspace), [`java-lab-solidjs/src/App.jsx`](https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/App.jsx) (SolidJS app), [`TaskService/src/main/java/com/javalab/taskservice/service/TaskService.java`](https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/service/TaskService.java) (Task management), [`ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionService.java`](https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionService.java) (Execution service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Learning client"]
  node_web["SolidJS app<br/>[App.jsx]"]
  node_taskui["Task workspace<br/>[TaskCodeEditor.jsx]"]
  node_profileui["Profile and progress<br/>[ProgressPage.jsx]"]
end

subgraph group_learning["Task and execution"]
  node_taskapi["Task API"]
  node_taskservice["Task management<br/>[TaskService.java]"]
  node_taskdata["Task data access<br/>[TaskDao.java]"]
  node_execution["Execution service"]
  node_compiler["In-memory compiler"]
  node_testcases["Test runner"]
  node_ws["Execution updates"]
  node_taskevents["Task event publisher<br/>[KafkaSender.java]"]
  node_executionconsumer["Execution consumer<br/>[KafkaConsumer.java]"]
end

subgraph group_identity["Identity and messaging"]
  node_users["User API"]
  node_auth["Authentication<br/>[AuthService.java]"]
  node_userstore[("User persistence")]
  node_notify["Notifications"]
  node_email["Email delivery<br/>[EmailService.java]"]
  node_userconsumer["User event consumer<br/>[KafkaConsumer.java]"]
  node_notifyconsumer["Notification consumer<br/>[KafkaConsumer.java]"]
end

subgraph group_engagement["Progress and AI"]
  node_progress["Progress tracking"]
  node_achievements["Achievements"]
  node_aicontroller["AI chat API<br/>[AiController.java]"]
  node_ai["AI chat service<br/>[AiService.java]"]
  node_chatmemory[("Chat history<br/>[AiChatService.java]")]
  node_progressconsumer["Progress consumer<br/>[KafkaConsumer.java]"]
end

subgraph group_events["Event backbone"]
  node_kafka["Kafka"]
end

node_learner(("Learner"))
node_keycloak["Keycloak"]
node_mail["Mail provider"]
node_llm["AI model provider"]

node_learner -->|"uses"| node_web
node_web -->|"opens task"| node_taskui
node_web -->|"views progress"| node_profileui
node_taskui -->|"requests task"| node_taskapi
node_taskapi -->|"dispatches"| node_taskservice
node_taskservice -->|"reads and writes"| node_taskdata
node_taskservice -->|"publishes creation"| node_taskevents
node_taskevents -->|"sends event"| node_kafka
node_kafka -->|"delivers event"| node_notifyconsumer
node_notifyconsumer -->|"dispatches"| node_notify
node_notify -->|"sends email"| node_email
node_email -->|"delivers"| node_mail
node_kafka -->|"delivers events"| node_userconsumer
node_userconsumer -->|"dispatches"| node_auth
node_auth -->|"reads and writes"| node_userstore
node_auth -->|"updates status"| node_keycloak
node_kafka -->|"delivers events"| node_progressconsumer
node_progressconsumer -->|"updates activity"| node_progress
node_progress -->|"checks milestones"| node_achievements
node_profileui -->|"requests progress"| node_progress
node_taskui -.->|"requests chat"| node_aicontroller
node_aicontroller -->|"dispatches"| node_ai
node_ai -->|"requests completion"| node_llm
node_ai -->|"loads and saves history"| node_chatmemory
node_kafka -->|"delivers requests"| node_executionconsumer
node_executionconsumer -->|"dispatches"| node_execution
node_execution -->|"compiles code"| node_compiler
node_execution -->|"runs tests"| node_testcases
node_testcases -->|"publishes results"| node_ws
node_ws -->|"streams feedback"| node_taskui

click node_web "https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/App.jsx"
click node_taskui "https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/components/Tasks/TaskProfile/TaskCodeEditor/TaskCodeEditor.jsx"
click node_profileui "https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/pages/ProgressPage.jsx"
click node_taskapi "https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/controller/TaskController.java"
click node_taskservice "https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/service/TaskService.java"
click node_taskdata "https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/dao/TaskDao.java"
click node_execution "https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionService.java"
click node_compiler "https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/util/InMemoryCompiler.java"
click node_testcases "https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/TestCaseService.java"
click node_ws "https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionWebSocketHandler.java"
click node_users "https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/controller/UserController.java"
click node_auth "https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/service/AuthService.java"
click node_userstore "https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/repository/UserRepository.java"
click node_notify "https://github.com/yuranium/javalab/blob/master/NotificationService/src/main/java/com/wenn/notificationservice/service/NotificationDispatcher.java"
click node_email "https://github.com/yuranium/javalab/blob/master/NotificationService/src/main/java/com/wenn/notificationservice/service/EmailService.java"
click node_progress "https://github.com/yuranium/javalab/blob/master/ProgressService/src/main/java/com/wenn/progressservice/service/ProgressService.java"
click node_achievements "https://github.com/yuranium/javalab/blob/master/ProgressService/src/main/java/com/wenn/progressservice/service/AchievementService.java"
click node_aicontroller "https://github.com/yuranium/javalab/blob/master/AiService/src/main/java/com/wenn/aiservice/controller/AiController.java"
click node_ai "https://github.com/yuranium/javalab/blob/master/AiService/src/main/java/com/wenn/aiservice/service/AiService.java"
click node_chatmemory "https://github.com/yuranium/javalab/blob/master/AiService/src/main/java/com/wenn/aiservice/service/AiChatService.java"
click node_taskevents "https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/service/kafka/KafkaSender.java"
click node_userconsumer "https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/service/kafka/KafkaConsumer.java"
click node_notifyconsumer "https://github.com/yuranium/javalab/blob/master/NotificationService/src/main/java/com/wenn/notificationservice/service/kafka/KafkaConsumer.java"
click node_progressconsumer "https://github.com/yuranium/javalab/blob/master/ProgressService/src/main/java/com/wenn/progressservice/service/kafka/KafkaConsumer.java"
click node_executionconsumer "https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/kafka/KafkaConsumer.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_taskui,node_profileui toneBlue
class node_taskapi,node_taskservice,node_taskdata,node_execution,node_compiler,node_testcases,node_ws,node_taskevents,node_executionconsumer toneAmber
class node_users,node_auth,node_userstore,node_notify,node_email,node_userconsumer,node_notifyconsumer toneMint
class node_progress,node_achievements,node_aicontroller,node_ai,node_chatmemory,node_progressconsumer toneRose
class node_kafka,node_learner,node_keycloak,node_mail,node_llm toneIndigo
```

## Components

### Learning client

- [SolidJS app](https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/App.jsx): `java-lab-solidjs/src/App.jsx`
- [Task workspace](https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/components/Tasks/TaskProfile/TaskCodeEditor/TaskCodeEditor.jsx): `java-lab-solidjs/src/components/Tasks/TaskProfile/TaskCodeEditor/TaskCodeEditor.jsx`
- [Profile and progress](https://github.com/yuranium/javalab/blob/master/java-lab-solidjs/src/pages/ProgressPage.jsx): `java-lab-solidjs/src/pages/ProgressPage.jsx`

### Task and execution

- [Task API](https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/controller/TaskController.java): `TaskService/src/main/java/com/javalab/taskservice/controller/TaskController.java`
- [Task management](https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/service/TaskService.java): `TaskService/src/main/java/com/javalab/taskservice/service/TaskService.java`
- [Task data access](https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/dao/TaskDao.java): `TaskService/src/main/java/com/javalab/taskservice/dao/TaskDao.java`
- [Execution service](https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionService.java): `ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionService.java`
- [In-memory compiler](https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/util/InMemoryCompiler.java): `ExecutionService/src/main/java/com/javalab/executionservice/util/InMemoryCompiler.java`
- [Test runner](https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/TestCaseService.java): `ExecutionService/src/main/java/com/javalab/executionservice/service/TestCaseService.java`
- [Execution updates](https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionWebSocketHandler.java): `ExecutionService/src/main/java/com/javalab/executionservice/service/ExecutionWebSocketHandler.java`
- [Task event publisher](https://github.com/yuranium/javalab/blob/master/TaskService/src/main/java/com/javalab/taskservice/service/kafka/KafkaSender.java): `TaskService/src/main/java/com/javalab/taskservice/service/kafka/KafkaSender.java`
- [Execution consumer](https://github.com/yuranium/javalab/blob/master/ExecutionService/src/main/java/com/javalab/executionservice/service/kafka/KafkaConsumer.java): `ExecutionService/src/main/java/com/javalab/executionservice/service/kafka/KafkaConsumer.java`

### Identity and messaging

- [User API](https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/controller/UserController.java): `UserService/src/main/java/com/yuranium/userservice/controller/UserController.java`
- [Authentication](https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/service/AuthService.java): `UserService/src/main/java/com/yuranium/userservice/service/AuthService.java`
- [User persistence](https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/repository/UserRepository.java): `UserService/src/main/java/com/yuranium/userservice/repository/UserRepository.java`
- [Notifications](https://github.com/yuranium/javalab/blob/master/NotificationService/src/main/java/com/wenn/notificationservice/service/NotificationDispatcher.java): `NotificationService/src/main/java/com/wenn/notificationservice/service/NotificationDispatcher.java`
- [Email delivery](https://github.com/yuranium/javalab/blob/master/NotificationService/src/main/java/com/wenn/notificationservice/service/EmailService.java): `NotificationService/src/main/java/com/wenn/notificationservice/service/EmailService.java`
- [User event consumer](https://github.com/yuranium/javalab/blob/master/UserService/src/main/java/com/yuranium/userservice/service/kafka/KafkaConsumer.java): `UserService/src/main/java/com/yuranium/userservice/service/kafka/KafkaConsumer.java`
- [Notification consumer](https://github.com/yuranium/javalab/blob/master/NotificationService/src/main/java/com/wenn/notificationservice/service/kafka/KafkaConsumer.java): `NotificationService/src/main/java/com/wenn/notificationservice/service/kafka/KafkaConsumer.java`

### Progress and AI

- [Progress tracking](https://github.com/yuranium/javalab/blob/master/ProgressService/src/main/java/com/wenn/progressservice/service/ProgressService.java): `ProgressService/src/main/java/com/wenn/progressservice/service/ProgressService.java`
- [Achievements](https://github.com/yuranium/javalab/blob/master/ProgressService/src/main/java/com/wenn/progressservice/service/AchievementService.java): `ProgressService/src/main/java/com/wenn/progressservice/service/AchievementService.java`
- [AI chat API](https://github.com/yuranium/javalab/blob/master/AiService/src/main/java/com/wenn/aiservice/controller/AiController.java): `AiService/src/main/java/com/wenn/aiservice/controller/AiController.java`
- [AI chat service](https://github.com/yuranium/javalab/blob/master/AiService/src/main/java/com/wenn/aiservice/service/AiService.java): `AiService/src/main/java/com/wenn/aiservice/service/AiService.java`
- [Chat history](https://github.com/yuranium/javalab/blob/master/AiService/src/main/java/com/wenn/aiservice/service/AiChatService.java): `AiService/src/main/java/com/wenn/aiservice/service/AiChatService.java`
- [Progress consumer](https://github.com/yuranium/javalab/blob/master/ProgressService/src/main/java/com/wenn/progressservice/service/kafka/KafkaConsumer.java): `ProgressService/src/main/java/com/wenn/progressservice/service/kafka/KafkaConsumer.java`

### Event backbone

- **Kafka**

### Other components

- **Learner**
- **Keycloak**
- **Mail provider**
- **AI model provider**

## Connections

- Learner → SolidJS app: uses
- SolidJS app → Task workspace: opens task
- SolidJS app → Profile and progress: views progress
- Task workspace → Task API: requests task
- Task API → Task management: dispatches
- Task management → Task data access: reads and writes
- Task management → Task event publisher: publishes creation
- Task event publisher → Kafka: sends event
- Kafka → Notification consumer: delivers event
- Notification consumer → Notifications: dispatches
- Notifications → Email delivery: sends email
- Email delivery → Mail provider: delivers
- Kafka → User event consumer: delivers events
- User event consumer → Authentication: dispatches
- Authentication → User persistence: reads and writes
- Authentication → Keycloak: updates status
- Kafka → Progress consumer: delivers events
- Progress consumer → Progress tracking: updates activity
- Progress tracking → Achievements: checks milestones
- Profile and progress → Progress tracking: requests progress
- Task workspace → AI chat API: requests chat
- AI chat API → AI chat service: dispatches
- AI chat service → AI model provider: requests completion
- AI chat service → Chat history: loads and saves history
- Kafka → Execution consumer: delivers requests
- Execution consumer → Execution service: dispatches
- Execution service → In-memory compiler: compiles code
- Execution service → Test runner: runs tests
- Test runner → Execution updates: publishes results
- Execution updates → Task workspace: streams feedback
