Введение в транзакции в Nest
Пусть страница должна изменить сразу две таблицы. Первая запись уходит в базу, а на второй шаг приходит ошибка. Клиент видит сбой, но первая строка уже осталась в таблице, и данные расходятся с ожиданием.
Транзакция в базе объединяет такие шаги в один блок. Пока блок не завершён успешно, база может отменить все изменения внутри него. TypeORM открывает блок через источник данных приложения, а каждый шаг внутри выполняют через менеджер, который привязан к этому блоку, а не к обычному репозиторию.
В Nest источник данных регистрирует
модуль базы и приходит в класс
через конструктор так же, как
сервис. Сущности подключают в
модуле темы через TypeOrmModule.forFeature,
а корень поднимает PostgreSQL
с autoLoadEntities и
synchronize для базы
site.
Дальше разберём границу блока, откат при ошибке, перенос логики в сервис, связанную запись в том же callback и явный уровень изоляции. На сайте с материалами это помогает не оставлять полуготовые наборы строк после сбоя на втором шаге.