28 июл. 2026 г.

SAP Technologies: терминалы тестирования, фото-верификация и отчеты

Fullstack-система для сенсорных терминалов: NestJS API, JWT-аутентификация по пропускам, фото-верификация, MinIO, Excel-импорт, очередь генерации отчетов, React-админка и Telegram-бот." seoTitle: "SAP Technologies - кейс fullstack разработки

TypeScriptNestJSNext.jsReactMySQLMinIOS3RedisDockerDocker ComposeJWTREST APISwagger / OpenAPITypeORM

Проект был связан с сенсорными терминалами для тестирования сотрудников. Сценарий выглядел простым только снаружи: сотрудник прикладывает пропуск, подтверждает личность через фото, проходит тест, а администраторы после этого работают с пользователями, результатами и отчетами.

На практике нужно было связать несколько частей: терминальный frontend, backend API, файловое хранилище, админку, Excel-импорт, генерацию отчетов и Telegram-уведомления. Ошибка в одном месте могла сломать весь операционный поток: от авторизации пользователя до получения отчета.

Моя роль

Я работал как fullstack-разработчик и закрывал как backend, так и админский интерфейс.

Основные задачи:

  • backend API на NestJS с модульной структурой;
  • JWT-аутентификация по пропускам;
  • фото-верификация пользователя и хранение изображений в MinIO;
  • загрузка пользователей из Excel;
  • генерация отчетов в Excel;
  • очередь генерации отчетов с интеграцией внешнего PHP-сервиса;
  • React-админка на MUI и Redux Toolkit;
  • Telegram-бот на NestJS/Telegraf для уведомлений и рассылки отчетов;
  • использование собственного nestjs-typeorm-template как основы проекта.

Как была устроена система

Backend отвечал за пользовательские сценарии терминала, административные операции и интеграции. Файлы не складывались рядом с приложением: фото и отчеты уходили в MinIO, чтобы не привязывать хранение к контейнеру приложения.

Отчеты были вынесены в отдельный асинхронный поток. Это позволило не держать HTTP-запрос открытым во время генерации и оставить место для будущей миграции PHP-генератора на Node.js без изменения пользовательского сценария.

Что было важным

В этом проекте хорошо проявилась разница между “сделать форму” и “сделать рабочий контур”. Нужно было учитывать реальные ограничения терминалов, файлы, права администраторов, пакетные загрузки из Excel и то, что результат должен быть понятен людям, которые не занимаются разработкой.

Админка поэтому была не декоративной, а рабочей: управление пользователями, отчетами и данными должно было быть достаточно простым для регулярного использования.

Результат

Получилась система вокруг терминалов: авторизация по пропускам, тестирование, фото-верификация, файловое хранилище, отчеты, админка и уведомления. Этот кейс хорошо показывает мой опыт быстрой сборки продукта из нескольких сервисных частей и доведения его до эксплуатационного состояния.

Комментарии

Пока нет комментариев — будьте первым.