# rmouahid/codyngame architecture

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

- Interactive diagram: https://gitdiagram.com/rmouahid/codyngame
- Repository: https://github.com/rmouahid/codyngame

## Overview

CodYngame is a JavaFX coding-exercise desktop app. Its documented workflow is account access, exercise and language selection, solution editing and sandboxed checking, followed by score and submission-history tracking. The graph includes the INCLUDE exercise path shown in source and the broader documented capabilities; unsampled standard-exercise and dashboard wiring is not inferred. Edges are limited to relationships visible in excerpts, the source index, or README.

Main entry points: [`src/main/java/controller/IncludeExerciseController.java`](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/IncludeExerciseController.java) (Include exercise), [`src/main/java/model/DatabaseConnection.java`](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/DatabaseConnection.java) (Database connection), [`src/main/java/controller/LoginController.java`](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/LoginController.java) (Login), [`src/main/java/model/SubmissionDAO.java`](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/SubmissionDAO.java) (Submission records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop interface"]
  node_main["JavaFX entry<br/>[Main.java]"]
  node_login["Login"]
  node_choice["Exercise selection"]
  node_solve["Include exercise"]
  node_home["Home"]
  node_dashboard["Dashboard"]
  node_profile["Profile"]
  node_editprofile["Edit profile"]
end

subgraph group_domain["Exercises and execution"]
  node_exercise["Exercise catalog<br/>[ExerciseDAO.java]"]
  node_language["Languages<br/>[LanguageDAO.java]"]
  node_merge["Include code merge"]
  node_sandbox["Code sandbox<br/>[Sandbox.java]"]
  node_testcases["Test cases<br/>[TestCaseDAO.java]"]
end

subgraph group_accounts["Accounts and progress"]
  node_users["User accounts<br/>[UserDAO.java]"]
  node_session["Current session<br/>[Session.java]"]
  node_submissions["Submission records<br/>[SubmissionDAO.java]"]
  node_stats["Submission statistics"]
end

subgraph group_persistence["Persistence"]
  node_dbconn["Database connection"]
  node_mysql[("MySQL database<br/>[database.sql]")]
end

node_user(("User"))
node_docker["Docker runtime"]

node_user -->|"opens app"| node_main
node_main -->|"loads view"| node_login
node_user -->|"signs in"| node_login
node_login -->|"checks credentials"| node_users
node_login -->|"sets session"| node_session
node_choice -->|"loads languages"| node_language
node_choice -->|"filters exercises"| node_exercise
node_choice -->|"opens selection"| node_solve
node_solve -->|"loads tests"| node_testcases
node_solve -->|"merges solution"| node_merge
node_merge -->|"runs code"| node_sandbox
node_sandbox -->|"executes in"| node_docker
node_solve -->|"records result"| node_submissions
node_solve -->|"updates score"| node_users
node_home -->|"reads session"| node_session
node_profile -->|"loads history"| node_submissions
node_dashboard -->|"shows progress"| node_user
node_editprofile -->|"reads session"| node_session
node_editprofile -->|"updates account"| node_dbconn
node_users -->|"queries"| node_dbconn
node_exercise -->|"queries"| node_dbconn
node_submissions -->|"queries"| node_dbconn
node_submissions -->|"builds statistics"| node_stats
node_dbconn -->|"connects to"| node_mysql
node_solve -->|"checks outputs"| node_testcases

click node_main "https://github.com/rmouahid/codyngame/blob/main/src/main/java/com/codyngame/Main.java"
click node_login "https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/LoginController.java"
click node_choice "https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/IncludeChoiceController.java"
click node_solve "https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/IncludeExerciseController.java"
click node_home "https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/HomeController.java"
click node_dashboard "https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/DashboardController.java"
click node_profile "https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/ProfilController.java"
click node_editprofile "https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/EditProfileController.java"
click node_exercise "https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/ExerciseDAO.java"
click node_language "https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/LanguageDAO.java"
click node_merge "https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/FusionneurCode3.java"
click node_sandbox "https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/Sandbox.java"
click node_testcases "https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/TestCaseDAO.java"
click node_users "https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/UserDAO.java"
click node_session "https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/Session.java"
click node_submissions "https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/SubmissionDAO.java"
click node_stats "https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/SubmissionStats.java"
click node_dbconn "https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/DatabaseConnection.java"
click node_mysql "https://github.com/rmouahid/codyngame/blob/main/src/main/resources/database/database.sql"

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_main,node_login,node_choice,node_solve,node_home,node_dashboard,node_profile,node_editprofile,node_user toneBlue
class node_exercise,node_language,node_merge,node_sandbox,node_testcases toneAmber
class node_users,node_session,node_submissions,node_stats toneMint
class node_dbconn,node_mysql toneRose
class node_docker toneIndigo
```

## Components

### Desktop interface

- [JavaFX entry](https://github.com/rmouahid/codyngame/blob/main/src/main/java/com/codyngame/Main.java): `src/main/java/com/codyngame/Main.java`
- [Login](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/LoginController.java): `src/main/java/controller/LoginController.java`
- [Exercise selection](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/IncludeChoiceController.java): `src/main/java/controller/IncludeChoiceController.java`
- [Include exercise](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/IncludeExerciseController.java): `src/main/java/controller/IncludeExerciseController.java`
- [Home](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/HomeController.java): `src/main/java/controller/HomeController.java`
- [Dashboard](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/DashboardController.java): `src/main/java/controller/DashboardController.java`
- [Profile](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/ProfilController.java): `src/main/java/controller/ProfilController.java`
- [Edit profile](https://github.com/rmouahid/codyngame/blob/main/src/main/java/controller/EditProfileController.java): `src/main/java/controller/EditProfileController.java`

### Exercises and execution

- [Exercise catalog](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/ExerciseDAO.java): `src/main/java/model/ExerciseDAO.java`
- [Languages](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/LanguageDAO.java): `src/main/java/model/LanguageDAO.java`
- [Include code merge](https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/FusionneurCode3.java): `src/main/java/utils/FusionneurCode3.java`
- [Code sandbox](https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/Sandbox.java): `src/main/java/utils/Sandbox.java`
- [Test cases](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/TestCaseDAO.java): `src/main/java/model/TestCaseDAO.java`

### Accounts and progress

- [User accounts](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/UserDAO.java): `src/main/java/model/UserDAO.java`
- [Current session](https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/Session.java): `src/main/java/utils/Session.java`
- [Submission records](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/SubmissionDAO.java): `src/main/java/model/SubmissionDAO.java`
- [Submission statistics](https://github.com/rmouahid/codyngame/blob/main/src/main/java/utils/SubmissionStats.java): `src/main/java/utils/SubmissionStats.java`

### Persistence

- [Database connection](https://github.com/rmouahid/codyngame/blob/main/src/main/java/model/DatabaseConnection.java): `src/main/java/model/DatabaseConnection.java`
- [MySQL database](https://github.com/rmouahid/codyngame/blob/main/src/main/resources/database/database.sql): `src/main/resources/database/database.sql`

### Other components

- **User**
- **Docker runtime**

## Connections

- User → JavaFX entry: opens app (evidence: `README.md`)
- JavaFX entry → Login: loads view (evidence: `src/main/java/com/codyngame/Main.java`)
- User → Login: signs in (evidence: `README.md`)
- Login → User accounts: checks credentials (evidence: `src/main/java/controller/LoginController.java`)
- Login → Current session: sets session (evidence: `src/main/java/controller/LoginController.java`)
- Exercise selection → Languages: loads languages (evidence: `src/main/java/controller/IncludeChoiceController.java`)
- Exercise selection → Exercise catalog: filters exercises (evidence: `src/main/java/controller/IncludeChoiceController.java`)
- Exercise selection → Include exercise: opens selection (evidence: `src/main/java/controller/IncludeChoiceController.java`)
- Include exercise → Test cases: loads tests (evidence: `src/main/java/controller/IncludeExerciseController.java`)
- Include exercise → Include code merge: merges solution (evidence: `src/main/java/controller/IncludeExerciseController.java`)
- Include code merge → Code sandbox: runs code (evidence: `src/main/java/utils/FusionneurCode3.java`)
- Code sandbox → Docker runtime: executes in (evidence: `README.md`)
- Include exercise → Submission records: records result (evidence: `src/main/java/controller/IncludeExerciseController.java`)
- Include exercise → User accounts: updates score (evidence: `src/main/java/controller/IncludeExerciseController.java`)
- Home → Current session: reads session (evidence: `src/main/java/controller/HomeController.java`)
- Profile → Submission records: loads history (evidence: `src/main/java/controller/ProfilController.java`)
- Dashboard → User: shows progress (evidence: `README.md`)
- Edit profile → Current session: reads session (evidence: `src/main/java/controller/EditProfileController.java`)
- Edit profile → Database connection: updates account (evidence: `src/main/java/controller/EditProfileController.java`)
- User accounts → Database connection: queries (evidence: `src/main/java/model/UserDAO.java`)
- Exercise catalog → Database connection: queries (evidence: `src/main/java/model/ExerciseDAO.java`)
- Submission records → Database connection: queries (evidence: `src/main/java/model/SubmissionDAO.java`)
- Submission records → Submission statistics: builds statistics (evidence: `src/main/java/model/SubmissionDAO.java`)
- Database connection → MySQL database: connects to (evidence: `README.md`)
- Include exercise → Test cases: checks outputs (evidence: `README.md`)
