No description
- JavaScript 77.9%
- CSS 11.7%
- Go 9.2%
- HTML 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| db/migrations | ||
| docs | ||
| public | ||
| server | ||
| tests | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| package.json | ||
| README.md | ||
PC Builder
Веб-приложение для сборки ПК и подбора апгрейда: проверка аппаратной совместимости, расчет нагрузок питания, прогноз FPS в играх и кабинет управления заявками.
Работает на нативном Node.js и чистом клиентском Vanilla JS без внешних node_modules и сборщиков.
Быстрый старт
Требуется Node.js 18.17+. Зависимости устанавливать не нужно.
npm start # запуск HTTP-сервера (порт 3000)
npm run dev # запуск с автоперезапуском при изменении серверного кода
npm test # запуск тестов (node --test)
После старта приложение доступно по адресам:
- Публичный интерфейс:
http://localhost:3000 - Кабинет управления:
http://localhost:3000/#/staff
Учётные записи по умолчанию
| Логин | Пароль | Роль | Доступ |
|---|---|---|---|
admin |
admin123 |
Администратор | Заявки, аналитика, редактирование цен, импорт/экспорт прайса |
manager |
manager123 |
Менеджер | Заявки, аналитика, просмотр каталога |
Пароли меняются в разделе «Кабинет → Настройки → Мой пароль».
Команды
| Скрипт | Описание |
|---|---|
npm start |
Запуск сервера (PORT=3000) |
npm run dev |
Запуск сервера в режиме разработки (--watch) |
npm test |
Запуск набора тестов (node --test) |
npm run demo:seed |
Наполнение базы тестовыми заявками (-- --reset для сброса) |
npm run db:migrate |
Применение миграций из db/migrations к базе каталога |
npm run user:add -- <login> <role> "Name" |
Добавление или смена пароля пользователя кабинета |
npm run prices:dns -- <args> |
Утилиты сопоставления и обновления цен по базе DNS |
Переменные окружения
| Переменная | По умолчанию | Описание |
|---|---|---|
PORT |
3000 |
Порт HTTP-сервера |
HOST |
0.0.0.0 |
Сетевой интерфейс (0.0.0.0 для доступа по локальной сети) |
PCB_SHOP_DB |
server/data/shop.db |
Путь к закрытой SQLite базе заявок и аккаунтов |
Архитектура
Приложение использует две независимые базы данных SQLite:
public/data/pcparts.db(публичный каталог железа):- Скачивается браузером и читается на клиенте через
sql.js(WebAssembly). - Содержит справочники процессоров, видеокарт, кулеров, материнских плат (1500+ моделей), блоков питания и накопителей.
- Обеспечивает мгновенную фильтрацию и автоподбор без нагрузки на сеть.
- Скачивается браузером и читается на клиенте через
server/data/shop.db(серверная рабочая база):- Хранит заявки клиентов, сессии сотрудников, историю статусов и хеши паролей (scrypt).
- Никогда не отдается в публичный доступ.
pc-builder/
├── public/ # Статика и клиентский код
│ ├── css/ # Дизайн-система (tokens.css, base.css, components.css, screens.css)
│ ├── data/pcparts.db # База каталога компонентов
│ └── js/
│ ├── core/ # Хранилище состояния (store.js), DOM-хелпер (dom.js), роутер
│ ├── engine/ # Движок совместимости, питания, прогноза и автосборки
│ ├── screens/ # Экраны: home, builder, upgrade, track, staff
│ └── ui/ # UI-компоненты (steppedSlider, caseView, combo, choiceGroup)
├── server/ # HTTP-сервер Node.js
│ ├── lib/ # SQLite адаптеры, сессии, пароли, раздача статики
│ └── routes/api.js # Эндпоинты REST API
├── tests/ # Нативные тесты (api, engine, hardware, dns, priceCsv)
└── db/migrations/ # SQL-миграции каталога pcparts.db
REST API
| Метод и маршрут | Роль | Назначение |
|---|---|---|
GET /api/health |
Публичный | Статус сервера и версия |
GET /api/store |
Публичный | Настройки магазина и статус демо-доступа |
POST /api/requests |
Публичный | Создание заявки на сборку или апгрейд |
GET /api/track/:code |
Публичный | Отслеживание этапа заявки по номеру |
POST /api/auth/login |
Публичный | Авторизация сотрудника |
POST /api/auth/logout |
Авторизован | Завершение сессии |
GET /api/staff/requests |
Менеджер+ | Список заявок с фильтрами |
PATCH /api/staff/requests/:id |
Менеджер+ | Смена статуса заявки и заметки |
GET /api/staff/reports |
Менеджер+ | Статистика и аналитика по дням |
GET /api/staff/prices |
Менеджер+ | Таблица цен компонентов каталога |
POST /api/staff/prices/import |
Админ | Пакетный импорт прайса (CSV / XLSX) |
PUT /api/staff/prices/:type/:id |
Админ | Обновление цены отдельного компонента |