-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1.txt
More file actions
205 lines (134 loc) Β· 4.2 KB
/
1.txt
File metadata and controls
205 lines (134 loc) Β· 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
π§ Goal: High-level System Design of CodeArena
ποΈ Overview
βββββββββββββββββ
β Frontend β β React.js + Tailwind
ββββββββ¬βββββββββ
β REST / WebSocket
ββββββββΌβββββββββ
β Backend β β Node.js + Express.js
ββββββββ¬βββββββββ
β
ββββββββββββββββΌββββββββββββββ
β Code Judge (Worker) β β Docker-based
ββββββββββ¬ββββββββββββ¬ββββββββ
β β
βββββββββΌβββββ ββββββΌβββββββββ
β Redis Queueβ βGitHub (Raw) β β Templates
ββββββββ¬ββββββ ββββββ¬βββββββββ
β β
βββββββΌββββββ βββββΌβββββββββ
βPostgreSQL β β Object Storeβ β Optional
βββββββββββββ βββββββββββββββ
1οΈβ£ Frontend (React.js)
Features:
Browse problems, contests, submissions
Code editor (Monaco)
Real-time leaderboard via WebSocket
Fetch template from GitHub Raw
Example:
ts
Copy
Edit
GET https://raw.githubusercontent.com/CodeArenaOfficial/code-templates/main/problem-1001/python.py
2οΈβ£ Backend API (Express.js)
Responsibilities:
User Auth (JWT)
CRUD for problems, submissions
Serve contest logic
Push submissions to judge queue
Fetch template URLs dynamically
Endpoints:
bash
Copy
Edit
GET /api/problems
GET /api/problems/:id
POST /api/submit
GET /api/submissions/:id
GET /api/templates/:problemId/:language
3οΈβ£ Database (PostgreSQL)
Tables:
users
problems
submissions
contests
contest_participants
languages
testcases
Store only metadata here. Code templates are fetched from GitHub.
4οΈβ£ Code Judge System
Components:
Worker service running in background
Listens to Redis queue
Executes submitted code inside Docker container
Compares against test cases
Sends result back to backend
Tech:
Redis + BullMQ (queue)
Docker SDK
Python/Golang scripts to manage input/output
5οΈβ£ GitHub as File System (for templates)
Strategy:
Store templates in a public repo:
https://github.com/CodeArenaOfficial/code-templates
Structure:
bash
Copy
Edit
code-templates/
βββ problem-1001/
βββ python.py
βββ cpp.cpp
βββ java.java
Integration Flow:
User selects problem + language
Frontend sends request
Backend constructs raw GitHub URL
Frontend loads content into editor
6οΈβ£ Redis Queue
Purpose:
Store pending submissions
Decouple frontend request from judging
Allow retry/delayed processing
7οΈβ£ Judge Worker (Docker Sandbox)
Secure container for running untrusted code
Language-based containers: C++, Python, Java, etc.
Executes code β collects stdout β compares with expected
Output to Backend:
json
Copy
Edit
{
status: "Accepted",
runtime: 132,
memory: 25,
testcases_passed: 5
}
8οΈβ£ Optional: Object Storage (MinIO / S3)
Used only if storing:
Uploaded problem images
Large testcases
Logs / reports
π Security Considerations
Component Strategy
Code Execution Docker sandboxing, resource limits
Templates GitHub as source (read-only)
Auth JWT with refresh tokens
Input Validation Sanitize code, language, filenames
Rate Limit API throttle per user/IP
Webhook Abuse Validate GitHub webhook signatures (if used)
π§ͺ Example Submission Flow
User writes code in editor.
Clicks "Submit".
Frontend calls POST /api/submit.
Backend adds to Redis queue.
Judge service pulls from queue.
Runs in Docker, validates output.
Sends result back β updates DB β notifies user.
π Scaling Strategy (Later)
Layer Scale with
Backend Load balancer + multiple Node.js instances
Judge Multiple workers across VMs
DB Indexes, read replicas
Static Files CDN (for frontend + templates if moved from GitHub)
Templates Optionally cache GitHub content via Redis