# iamkrish-0708/codeclash architecture

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

## Overview

CodeClash is a 1v1 competitive coding arena. A player authenticates, creates or joins a room, starts a timed match, runs sample tests or submits Java code for full grading, and match results update Elo standings. The map separates HTTP entry points, gameplay services, and persistence. README capabilities such as the browser editor, challenge catalog, Google sign-in, and leaderboard are represented where the tree supports them; wiring for unsampled controllers and services is not inferred.

Main entry points: [`src/main/resources/static/js/api.js`](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/resources/static/js/api.js) (REST client), [`src/main/java/com/codeclash/repository`](https://github.com/iamkrish-0708/codeclash/tree/main/src/main/java/com/codeclash/repository) (JPA repositories), [`src/main/java/com/codeclash/service/SubmissionService.java`](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/SubmissionService.java) (Submission grading), [`src/main/java/com/codeclash/service/MatchService.java`](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/MatchService.java) (Match lifecycle)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser client"]
  node_webclient["REST client<br/>[api.js]"]
end

subgraph group_http["HTTP API"]
  node_authctrl["Authentication API"]
  node_roomctrl["Room API"]
  node_matchctrl["Match API"]
  node_submissionctrl["Submission API"]
  node_problemctrl["Challenge API"]
  node_leaderboardctrl["Leaderboard API"]
  node_userctrl["Profile API"]
end

subgraph group_domain["Gameplay services"]
  node_auth["Authentication<br/>[AuthService.java]"]
  node_rooms["Room management<br/>[RoomService.java]"]
  node_matches["Match lifecycle<br/>[MatchService.java]"]
  node_submissions["Submission grading"]
  node_problems["Challenge catalog"]
  node_execution["Execution interface"]
  node_javaexec["Java runner"]
  node_elo["Elo ratings<br/>[EloService.java]"]
end

subgraph group_persistence["Persistence"]
  node_repositories["JPA repositories"]
  node_database[("Application database")]
end

node_player(("Duelist"))
node_google["Google Identity"]
node_javaruntime["Java compiler/runtime"]

node_player -->|"uses"| node_webclient
node_webclient -->|"requests"| node_authctrl
node_webclient -->|"requests"| node_roomctrl
node_webclient -->|"requests"| node_matchctrl
node_webclient -->|"requests"| node_submissionctrl
node_webclient -->|"requests"| node_problemctrl
node_webclient -->|"requests"| node_leaderboardctrl
node_webclient -->|"requests"| node_userctrl
node_authctrl -->|"calls"| node_auth
node_roomctrl -->|"calls"| node_rooms
node_matchctrl -->|"calls"| node_matches
node_submissionctrl -->|"calls"| node_submissions
node_submissions -->|"executes code"| node_execution
node_execution -->|"delegates"| node_javaexec
node_javaexec -->|"compiles and runs"| node_javaruntime
node_submissions -->|"records result"| node_matches
node_matches -->|"calculates ratings"| node_elo
node_auth -.->|"verifies token"| node_google
node_auth -->|"reads/writes users"| node_repositories
node_rooms -->|"reads/writes rooms and users"| node_repositories
node_rooms -->|"looks up matches"| node_repositories
node_matches -->|"reads/writes match data"| node_repositories
node_submissions -->|"loads tests; saves submission"| node_repositories
node_problems -->|"loads challenges and tests"| node_repositories
node_repositories -->|"persists entities"| node_database

click node_webclient "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/resources/static/js/api.js"
click node_authctrl "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/AuthController.java"
click node_roomctrl "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/RoomController.java"
click node_matchctrl "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/MatchController.java"
click node_submissionctrl "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/SubmissionController.java"
click node_problemctrl "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/ProblemController.java"
click node_leaderboardctrl "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/LeaderboardController.java"
click node_userctrl "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/UserController.java"
click node_auth "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/AuthService.java"
click node_rooms "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/RoomService.java"
click node_matches "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/MatchService.java"
click node_submissions "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/SubmissionService.java"
click node_problems "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/ProblemService.java"
click node_execution "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/CodeExecutionService.java"
click node_javaexec "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/LocalJavaExecutionService.java"
click node_elo "https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/EloService.java"
click node_repositories "https://github.com/iamkrish-0708/codeclash/tree/main/src/main/java/com/codeclash/repository"

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_webclient toneBlue
class node_authctrl,node_roomctrl,node_matchctrl,node_submissionctrl,node_problemctrl,node_leaderboardctrl,node_userctrl toneAmber
class node_auth,node_rooms,node_matches,node_submissions,node_problems,node_execution,node_javaexec,node_elo toneMint
class node_repositories,node_database toneRose
class node_player,node_google,node_javaruntime toneIndigo
```

## Components

### Browser client

- [REST client](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/resources/static/js/api.js): `src/main/resources/static/js/api.js`

### HTTP API

- [Authentication API](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/AuthController.java): `src/main/java/com/codeclash/controller/AuthController.java`
- [Room API](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/RoomController.java): `src/main/java/com/codeclash/controller/RoomController.java`
- [Match API](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/MatchController.java): `src/main/java/com/codeclash/controller/MatchController.java`
- [Submission API](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/SubmissionController.java): `src/main/java/com/codeclash/controller/SubmissionController.java`
- [Challenge API](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/ProblemController.java): `src/main/java/com/codeclash/controller/ProblemController.java`
- [Leaderboard API](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/LeaderboardController.java): `src/main/java/com/codeclash/controller/LeaderboardController.java`
- [Profile API](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/controller/UserController.java): `src/main/java/com/codeclash/controller/UserController.java`

### Gameplay services

- [Authentication](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/AuthService.java): `src/main/java/com/codeclash/service/AuthService.java`
- [Room management](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/RoomService.java): `src/main/java/com/codeclash/service/RoomService.java`
- [Match lifecycle](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/MatchService.java): `src/main/java/com/codeclash/service/MatchService.java`
- [Submission grading](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/SubmissionService.java): `src/main/java/com/codeclash/service/SubmissionService.java`
- [Challenge catalog](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/ProblemService.java): `src/main/java/com/codeclash/service/ProblemService.java`
- [Execution interface](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/CodeExecutionService.java): `src/main/java/com/codeclash/service/CodeExecutionService.java`
- [Java runner](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/LocalJavaExecutionService.java): `src/main/java/com/codeclash/service/LocalJavaExecutionService.java`
- [Elo ratings](https://github.com/iamkrish-0708/codeclash/blob/main/src/main/java/com/codeclash/service/EloService.java): `src/main/java/com/codeclash/service/EloService.java`

### Persistence

- [JPA repositories](https://github.com/iamkrish-0708/codeclash/tree/main/src/main/java/com/codeclash/repository): `src/main/java/com/codeclash/repository`
- **Application database**

### Other components

- **Duelist**
- **Google Identity**
- **Java compiler/runtime**

## Connections

- Duelist → REST client: uses
- REST client → Authentication API: requests
- REST client → Room API: requests
- REST client → Match API: requests
- REST client → Submission API: requests
- REST client → Challenge API: requests
- REST client → Leaderboard API: requests
- REST client → Profile API: requests
- Authentication API → Authentication: calls
- Room API → Room management: calls
- Match API → Match lifecycle: calls
- Submission API → Submission grading: calls
- Submission grading → Execution interface: executes code
- Execution interface → Java runner: delegates
- Java runner → Java compiler/runtime: compiles and runs
- Submission grading → Match lifecycle: records result
- Match lifecycle → Elo ratings: calculates ratings
- Authentication → Google Identity: verifies token
- Authentication → JPA repositories: reads/writes users
- Room management → JPA repositories: reads/writes rooms and users
- Room management → JPA repositories: looks up matches
- Match lifecycle → JPA repositories: reads/writes match data
- Submission grading → JPA repositories: loads tests; saves submission
- Challenge catalog → JPA repositories: loads challenges and tests
- JPA repositories → Application database: persists entities
