Долгоруковская улица 36с1
Мы разрабатываем корпоративные информационные системы: учётные реестры, CRM-подобные решения, системы согласования и маршрутизации бизнес-процессов, аналитические дашборды. Это сложные внутренние платформы с богатой доменной логикой. Сейчас в контуре 26 сервисов: реестры, учётные и справочные системы, дашборды, конструктор опросов и портал как единая точка входа. Ищем разработчика, который возьмёт на себя серверную часть этих систем — от модели данных до эксплуатации в проде.
Обязанности
- Проектировать и разрабатывать HTTP API для внутренних систем: реестры, справочники, согласование, аналитика
- Отвечать за модель данных: схема, индексы, миграции, агрегаты, политика хранения — с расчётом на реальный объём, а не только на текущую задачу
- Реализовывать доменную логику бизнес-процессов: состояния и переходы, права на действие в зависимости от роли и контекста, обработка исключений из общих правил
- Поддерживать ролевую модель на сервере как источник истины: интерфейс отражает права, решение о доступе принимает backend
- Описывать контракты API в OpenAPI: по спецификации фронтенд генерирует клиент, поэтому контракт — часть разработки, а не документация постфактум
- Реализовывать серверную часть сложных таблиц и дашбордов: фильтрация, сортировка, серверная пагинация, выборки по большим объёмам, экспорт
- Развивать интеграции между сервисами и с внешними системами, включая ФНС: таймауты, повторные попытки, идемпотентность
- Поддерживать на стороне API механизмы актуализации данных: условные запросы (ETag, Last-Modified), корректные заголовки кэширования, эндпойнты, выдерживающие регулярный опрос клиентом
- Сопровождать свой код в эксплуатации: развёртывание, настройка nginx, логирование, диагностика инцидентов
- Участвовать в код-ревью, оптимизировать запросы и производительность.
Требования. Технически важно:
- Продакшн-опыт с Node.js: асинхронная модель и её типичные ошибки, потоки, обработка больших объёмов данных, ES-модули;
- Уверенный TypeScript: дженерики, точные типы для контрактов API, слоя данных и доменных сущностей; использование any требует обоснования;
- Express или Fastify с продуманной архитектурой: разделение слоёв, валидация входных данных, единая обработка ошибок;
- Практическое владение SQL: сложные запросы, чтение плана выполнения, проектирование схемы под нагрузку. MySQL или MariaDB;
- Работа с базой через драйвер mysql2: пул соединений, параметризованные запросы, транзакции;
- Валидация данных на границе API: Zod или аналогичное решение, единый контракт с фронтендом;
- Глубокое понимание HTTP: коды и заголовки, CORS и предзапросы, кэширование, таймауты. Значительная часть проблем интеграции относится к транспорту, а не к логике;
- Аутентификация и авторизация: сессии или токены, разграничение прав, аудит действий;
- Администрирование своего приложения в Linux и Windows Server: служба или systemd, nginx, разбор логов, права на файлы;
- Аккуратность в работе с персональными данными: понимание, зачем IP хранится в виде солёного хэша и почему идентификатор посетителя анонимный;
- Уверенное владение git.
Будет плюсом:
- Аналитический склад ума и интерес к предметной области;
- Опыт с реестровыми и учётными системами в госсекторе или крупных организациях;
- Опыт frontend-разработки на React и TypeScript: помогает договариваться о контрактах без посредников;
- Опыт с NestJS, Prisma, PostgreSQL — пригодится при запуске новых сервисов;
- Очереди и фоновые задачи: планировщики, воркеры, BullMQ или аналоги;
- Unit- и интеграционные тесты на API: Vitest, Jest, Supertest;
- Опыт с временными рядами, агрегатами и разбором логов;
- Realtime: WebSocket, SSE;
- Осмысленное применение ИИ-инструментов в продакшене;
- Python или PHP как второй язык: часть унаследованных сервисов написана не на Node.
Стек, с которым столкнётесь:
Node.js 20+, TypeScript, Express, MySQL (mysql2 без ORM), nginx как reverse proxy, OpenAPI для контрактов. Фронтенд — React, TypeScript, Vite.
Условия
- оформление в соответствии с 79-ФЗ «О государственной гражданской службе Российской Федерации»
- стабильный доход в компании Федерального масштаба, а также премирование по итогам работы
- ежегодный отпуск 30 календарных дней + отпуск за выслугу и ненормированный рабочий день
- реальные возможности профессионального и карьерного роста
- социальный пакет, включающий возможность прикрепления к ведомственной поликлинике, льготные путевки в ведомственные санатории
- удобное расположение офиса в центре города Москвы,; шаговая доступность от м. Новослободская (2 мин.)