How grodmir/codeduel works
CodeDuel is a Spring-based coding-duel backend: it supports account and profile management, rating-aware matchmaking, and asynchronous submission execution through a sandbox service. The visible matchmaking flow checks player availability and rating, pairs queued players, requests match creation, then notifies them. Authentication issues and revokes JWTs; user operations persist account/profile state. Battle messaging and sandbox handling are present, but no match lifecycle or evaluation implementation was sampled. Dashed links mark wiring not confirmed by the excerpts.
Main entry points: MatchmakingService.java Matchmaking · SubmissionListener.java Sandbox listener · ProfileService.java Profile & rating · UserController.java User endpoints
Components 20
Identity & profiles
- Auth endpoints
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/api/controller/AuthController.java - Authentication
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/domain/service/AuthService.java - JWT issuer
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/infrastructure/security/service/JwtService.java - User endpoints
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/api/controller/UserController.java - User management
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/domain/service/UserService.java - Profile & rating
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/domain/service/ProfileService.java - User persistence
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/infrastructure/persistence/adapter/UserRepositoryAdapter.java - Profile persistence
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/infrastructure/persistence/adapter/ProfileRepositoryAdapter.java
Matchmaking
- Queue endpoints
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/web/QueueController.java - Matchmaking
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/domain/service/MatchmakingService.java - Pair finder
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/domain/service/PairFinder.java - Queue store
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/infrastructure/InMemoryQueueStore.java - Match creation & notices
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/domain/port/MatchFoundListener.java
Battle execution
- Debug submission API
codeduel-app/src/main/java/com/codeduel/codeduelapp/debug/DebugController.java - Submission producer
codeduel-app/src/main/java/com/codeduel/codeduelapp/battle/messaging/SubmissionProducer.java - Sandbox listener
codeduel-sandbox/src/main/java/com/codeduel/codeduelsandbox/SubmissionListener.java
Shared messaging
- Submission task
codeduel-common/src/main/java/com/codeduel/SubmissionTaskMessage.java - Submission result
codeduel-common/src/main/java/com/codeduel/SubmissionResultMessage.java
Other components
- Player
- RabbitMQ
Connections 24
- Player → Auth endpoints: authenticates
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/api/controller/AuthController.java - Auth endpoints → Authentication: calls
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/api/controller/AuthController.java - Authentication → JWT issuer: issues token
- Player → User endpoints: manages account
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/api/controller/UserController.java - User endpoints → User management: calls
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/api/controller/UserController.java - User endpoints → Profile & rating: reads profile
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/api/controller/UserController.java - User management → Profile & rating: creates profile
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/domain/service/UserService.java - User management → User persistence: persists users
- Profile & rating → Profile persistence: persists profiles
- Player → Queue endpoints: queues
- Queue endpoints → Matchmaking: dispatches
- Matchmaking → Queue store: reads and writes
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/domain/service/MatchmakingService.java - Matchmaking → Pair finder: finds pairs
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/domain/service/MatchmakingService.java - Matchmaking → Profile & rating: gets rating
codeduel-app/src/main/java/com/codeduel/codeduelapp/auth/domain/service/ProfileService.java - Matchmaking → Match creation & notices: requests match
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/domain/service/MatchmakingService.java - Matchmaking → Player: sends match notice
codeduel-app/src/main/java/com/codeduel/codeduelapp/matchmaking/domain/service/MatchmakingService.java - Player → Debug submission API: submits code
codeduel-app/src/main/java/com/codeduel/codeduelapp/debug/DebugController.java - Debug submission API → Submission producer: dispatches task
codeduel-app/src/main/java/com/codeduel/codeduelapp/debug/DebugController.java - Submission producer → Submission task: publishes
- Submission producer → RabbitMQ: sends task
- RabbitMQ → Sandbox listener: delivers task
- Sandbox listener → Submission task: consumes
codeduel-sandbox/src/main/java/com/codeduel/codeduelsandbox/SubmissionListener.java - Sandbox listener → Submission result: emits result
codeduel-sandbox/src/main/java/com/codeduel/codeduelsandbox/SubmissionListener.java - Sandbox listener → RabbitMQ: publishes result