Рефакторинг и стабилизация электронного журнала на 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 часов.
Практическая ценность проекта
Этот кейс показывает не просто разработку нового функционала, а инженерную работу в сложной прикладной ситуации:
- восстановление и стабилизацию чужого проекта;
- глубокую переработку логики при ограничении по срокам;
- оптимизацию медленной интеграции с внешней системой;
- повышение безопасности и устойчивости серверной части;
- внедрение кэширования и новой стратегии работы с тяжёлыми запросами;
- способность быстро доводить проблемный продукт до рабочего состояния.