Задача. Платформа NEWVERSE с личными кабинетами для 2 250 пользователей работала на WordPress/PHP, и эту первую версию тоже делал я. Когда проект вырос, расчёты стали расходиться, а любую правку было страшно выкатывать. Нужно было перенести её на Next.js и PostgreSQL со всеми данными и без остановки работы, сохранить все данные и деньги пользователей до цента и навести порядок в расчётах.
Что сделал:
- Перенёс всех пользователей, договоры и кошельки и написал скрипты сверки старой и новой базы. Расхождение по деньгам — тысячные доли процента, и каждое объяснено.
- Нашёл и исправил 5 ошибок в расчётах старой версии. Одна из них каждый день переплачивала бонусы.
- Деньги ведутся неизменяемым журналом операций с проверкой сходимости балансов. Отмена операции — только встречной записью, история не теряется.
- 11 ночных задач в systemd с жёстким порядком расчётов.
- Кабинет пользователя, панель оператора с очередями заявок, 9 видов писем, сброс пароля.
- Разделил деньги разных направлений владельца: переводы между ними закрыты.
- Переезд домена: DNS, nginx, HTTPS, режим технических работ без остановки ночных расчётов.
- Около 90 наборов автотестов Playwright по рабочему сайту.
Стек: Next.js, TypeScript, PostgreSQL, Docker, Nginx.
Результат. Платформа работает в продакшене на новой версии, старый сайт оставлен только для чтения. Ежедневная переплата бонусов прекратилась, балансы сходятся с журналом операций без расхождений. Владелец ведёт направления как отдельные бизнесы, и деньги между ними не смешиваются. Автотесты не раз ловили ошибки до выкатки. Режим технических работ включается одной командой и может открыть сайт по таймеру.