Веб-платформа коллективной оптимизации кода (React + TypeScript + Node.js + MongoDB).
Реализовано по TechnicalSpecification.md для роли User:
- регистрация и логин,
- публикация задач с названием, языком программирования и ссылкой на репозиторий (с платным списанием баллов),
- отправка решений в чужие задачи через ссылку на репозиторий,
- голосование за чужие решения,
- автоматическое завершение задач по дедлайну,
- начисление награды победителю,
- лидерборд по баллам.
- Node.js 20+
- npm
- MongoDB (локально или удалённо)
client— React + Viteserver— Express + TypeScript + MongoDBsrc/routes— API роутыsrc/services— прикладная бизнес-логикаsrc/models— схемы и модели MongoDBsrc/middleware— middleware авторизации и rate-limit
Папка с low-fidelity прототипом UI удалена из репозитория, так как её содержимое уже интегрировано в основной клиент.
cd server
npm install
cp .env.example .envЗаполни .env (минимум MONGODB_URI и JWT_SECRET):
PORT=5000
MONGODB_URI=mongodb://127.0.0.1:27017/isisproject
JWT_SECRET=change_me_to_long_random_secret
PUBLISH_COST=10
PLATFORM_REWARD=50
INITIAL_POINTS=100Запуск dev-сервера:
npm run devПроверка:
GET http://localhost:5000/api/health
cd client
npm install
cp .env.example .env
npm run devFrontend откроется на http://localhost:5173.
Если backend не на http://localhost:5000, укажи в client/.env:
VITE_API_URL=http://localhost:5000- Зарегистрироваться в UI.
- Залогиниться.
- Опубликовать задачу (с названием, языком, repository URL и дедлайном; должны списаться
PUBLISH_COSTбаллов). - Под другим пользователем отправить решение в эту задачу (ссылка на репозиторий решения).
- Под третьим пользователем проголосовать за чужое решение.
- Дождаться дедлайна (или нажать «Закрыть просроченные задачи»), проверить начисление
PLATFORM_REWARDпобедителю. - Проверить лидерборд.
POST /api/auth/registerPOST /api/auth/loginGET /api/meGET /api/platform-configPOST /api/tasksGET /api/tasksPOST /api/tasks/:taskId/submissionsPOST /api/tasks/:taskId/votesPOST /api/tasks/finalize-expiredGET /api/leaderboard