F
Fand_igor

Рефакторинг и стабилизация электронного журнала на Next.js с интеграцией 1С

Краткое описание

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

Проект развивался как продолжение существующей версии:

  • Прошлая версия - проект в исходном состоянии, который я принял в работу после ухода предыдущих разработчиков.
  • Новая версия - переработанный вариант, в котором перепроектировал ключевые части логики, серверной обработки и интеграции с 1С.

Контекст задачи

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

При этом нужно было быстро решить реальные прикладные проблемы:

  • нестабильную логику в API и интеграции с 1С;
  • слабую структуру серверного слоя;
  • долгие и тяжёлые запросы;
  • зависания интерфейса при загрузке данных;
  • низкую предсказуемость поведения системы при ошибках;
  • риски по безопасности и по неаккуратной обработке запросов.

Что было сделано

  • Подхватил чужой проект и переработал его без полного переписывания с нуля.
  • Перенёс критичную бизнес-логику из разрозненных API-роутов в более понятный и управляемый серверный слой.
  • Разделил клиентские вызовы, API-обработчики и серверные функции, чтобы уменьшить дублирование и упростить сопровождение.
  • Привёл обработку ошибок к более предсказуемому виду как на клиенте, так и на сервере.
  • Усилил безопасность обработки запросов, валидации параметров и сценариев авторизации.
  • Переработал авторизацию и поведение формы входа, включая валидацию, обработку ошибок, состояние загрузки и защиту от повторных действий пользователя.
  • Убрал часть хрупких мест в структуре проекта и подготовил более понятную архитектурную основу для дальнейшего развития.

Что было сделано для производительности

  • Разобрал тяжёлые запросы к 1С и отказался от сценария, при котором пользовательский интерфейс ждал один длинный монолитный ответ.
  • Разделил получение данных на более короткие и управляемые запросы.
  • Для тяжёлых сценариев вынес часть загрузки в фоновую или отложенную обработку.
  • Для более частых пользовательских действий оставил короткие и быстрые запросы, чтобы не блокировать интерфейс.
  • Добавил кэширование данных из 1С через SQLite с TTL, чтобы снизить нагрузку на внешний источник и ускорить повторные обращения.
  • Настроил отдельный серверный слой для работы с кэшем, сроками хранения, очисткой и аннулированием кэшированных ответов.
  • Стабилизировал работу системы в сценариях, где раньше запросы могли ждать до 10 минут или зависать полностью.

Архитектурные улучшения

  • Добавил отдельные серверные модули для работы с базой, кэшем и серверными действиями.
  • Централизовал подключение к SQLite и сделал работу с локальной конфигурацией и кэшем более управляемой.
  • Вынес интеграцию с 1С в отдельный слой, чтобы API-роуты выполняли роль тонких обработчиков, а не содержали всю бизнес-логику целиком.
  • Подготовил инфраструктурную основу для дальнейшего развития проекта: Docker, инициализацию БД, отдельные служебные модули для серверной части.
  • Сохранил совместимость с существующим проектом и интерфейсом, чтобы уложиться в ограничение по времени и не ломать рабочие пользовательские сценарии.

Что это показывает технически

  • Умение быстро входить в чужой код и стабилизировать систему без полного переписывания.
  • Опыт rescue/refactor-задач, где важна не только разработка, но и техническая реанимация проекта.
  • Опыт оптимизации интеграции с медленным внешним источником данных.
  • Умение проектировать серверный слой, кэширование и стратегию работы с тяжёлыми запросами.
  • Умение работать в условиях ограниченного бюджета по времени и принимать инженерные компромиссы без потери результата.

Технологии

  • Next.js
  • React
  • TypeScript
  • Node.js
  • SQLite
  • better-sqlite3
  • 1С API integration
  • Tailwind CSS
  • Docker

Моя роль

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

Практическая ценность проекта

Этот кейс показывает не просто разработку нового функционала, а инженерную работу в сложной прикладной ситуации:

  • восстановление и стабилизацию чужого проекта;
  • глубокую переработку логики при ограничении по срокам;
  • оптимизацию медленной интеграции с внешней системой;
  • повышение безопасности и устойчивости серверной части;
  • внедрение кэширования и новой стратегии работы с тяжёлыми запросами;
  • способность быстро доводить проблемный продукт до рабочего состояния.