SAP Technologies: терминалы тестирования, фото-верификация и отчеты
Fullstack-система для сенсорных терминалов: NestJS API, JWT-аутентификация по пропускам, фото-верификация, MinIO, Excel-импорт, очередь генерации отчетов, React-админка и Telegram-бот." seoTitle: "SAP Technologies - кейс fullstack разработки
Проект был связан с сенсорными терминалами для тестирования сотрудников. Сценарий выглядел простым только снаружи: сотрудник прикладывает пропуск, подтверждает личность через фото, проходит тест, а администраторы после этого работают с пользователями, результатами и отчетами.
На практике нужно было связать несколько частей: терминальный 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 и то, что результат должен быть понятен людям, которые не занимаются разработкой.
Админка поэтому была не декоративной, а рабочей: управление пользователями, отчетами и данными должно было быть достаточно простым для регулярного использования.
Результат
Получилась система вокруг терминалов: авторизация по пропускам, тестирование, фото-верификация, файловое хранилище, отчеты, админка и уведомления. Этот кейс хорошо показывает мой опыт быстрой сборки продукта из нескольких сервисных частей и доведения его до эксплуатационного состояния.