Microservices backend for LetsSolve — a coding practice platform where users solve problems, submit code, and receive real-time evaluation results.
flowchart LR
User([User / Frontend])
subgraph Backend
Problem[Problem Service<br/>:3000]
Submission[Submission Service<br/>:3001]
Evaluator[Evaluator Service<br/>:3002]
Socket[Socket Service<br/>:3003]
end
Mongo[(MongoDB Atlas)]
Redis[(Redis / BullMQ)]
Docker[[Docker containers<br/>Python · Java · C++]]
User -->|REST| Problem
User -->|POST submission| Submission
User <-->|Socket.IO| Socket
Submission -->|fetch problem + tests| Problem
Problem --> Mongo
Submission --> Mongo
Submission -->|enqueue job| Redis
Redis -->|consume job| Evaluator
Evaluator -->|run code| Docker
Evaluator -->|enqueue result| Redis
Redis -->|result worker| Submission
Submission -->|sendPayload| Socket
Socket -->|submissionPayloadResponse| User
| Service | Stack | Description |
|---|---|---|
| lets-solve-problem-service | Express, MongoDB | Admin API to create and manage coding problems |
| letsSolve-submission-service | Fastify, MongoDB, BullMQ | Accepts code submissions and orchestrates evaluation |
| LetsCode-Evaluator-Service | TypeScript, Express, Docker, BullMQ | Runs submitted code in isolated containers |
| letsCode-Socket-Service | Express, Socket.IO, Redis | Pushes evaluation results to clients in real time |
- Node.js 18+
- MongoDB (local or Atlas)
- Redis
- Docker (required for the Evaluator Service)
Each service runs independently. Clone the repo, then set up and start each service in its own directory.
cd lets-solve-problem-service
npm installCreate a .env file:
PORT=3000
ATLAS_DB_URL=<mongodb-connection-string>
LOG_DB_URL=<mongodb-log-db-url> # optionalnpm run devOptionally seed starter problems:
npm run seedHealth check: GET /ping
cd letsSolve-submission-service
npm installCreate a .env file:
PORT=3001
ATLAS_DB_URL=<mongodb-connection-string>
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
PROBLEM_ADMIN_SERVICE_URL=http://localhost:3000npm run devAPI: POST /api/v1/submissions
cd LetsCode-Evaluator-Service
npm installCreate a .env file:
PORT=3002
REDIS_HOST=127.0.0.1
REDIS_PORT=6379npm run devAPI: POST /api/v1/submission
cd letsCode-Socket-Service
npm install
npm run dev # listens on port 3003| Method | Endpoint | Description |
|---|---|---|
| GET | / |
List all problems |
| GET | /:id |
Get a problem by ID |
| POST | / |
Create a problem |
| PUT | /:id |
Update a problem |
| DELETE | /:id |
Delete a problem |
| Method | Endpoint | Description |
|---|---|---|
| POST | / |
Submit code for evaluation |
| Method | Endpoint | Description |
|---|---|---|
| GET | /ping |
Health check |
| POST | /submission |
Queue a submission for evaluation |
- Python
- Java
- C++ (partial support)
LetsCodeBackend/
├── lets-solve-problem-service/ # Problem CRUD & test cases
├── letsSolve-submission-service/ # Submission handling & queueing
├── LetsCode-Evaluator-Service/ # Code execution via Docker
└── letsCode-Socket-Service/ # Real-time result delivery
ISC