No description
  • JavaScript 77.9%
  • CSS 11.7%
  • Go 9.2%
  • HTML 1.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-29 11:02:21 +03:00
db/migrations feat(data): add Go hardware scraper and 2010-2026 legacy database migration 2026-10-29 10:45:38 +03:00
docs По отзыву тестера 2: P-ядра Intel, «апгрейд не нужен», тупик LGA1700 + DDR4 2026-10-28 13:05:11 +00:00
public style(ui): standardize catalog cards, pin footer and add combo dropup 2026-10-29 11:02:21 +03:00
server Два способа показать сайт людям: демо без сервера и полный публичный режим 2026-10-28 08:42:37 +00:00
tests fix(engine): support legacy motherboard recognition and DDR normalization 2026-10-29 10:45:41 +03:00
tools feat(data): add Go hardware scraper and 2010-2026 legacy database migration 2026-10-29 10:45:38 +03:00
.gitattributes .gitattributes: LF для текста, CSV и двоичные файлы — как есть 2026-10-22 07:11:31 +00:00
.gitignore Цены DNS: список поисковых запросов по каталогу 2026-10-27 10:21:10 +04:00
AGENTS.md docs: reform AGENTS.md to English and streamline README.md 2026-10-29 10:07:31 +03:00
package.json Два способа показать сайт людям: демо без сервера и полный публичный режим 2026-10-28 08:42:37 +00:00
README.md docs: reform AGENTS.md to English and streamline README.md 2026-10-29 10:07:31 +03:00

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:

  1. public/data/pcparts.db (публичный каталог железа):
    • Скачивается браузером и читается на клиенте через sql.js (WebAssembly).
    • Содержит справочники процессоров, видеокарт, кулеров, материнских плат (1500+ моделей), блоков питания и накопителей.
    • Обеспечивает мгновенную фильтрацию и автоподбор без нагрузки на сеть.
  2. 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 Админ Обновление цены отдельного компонента