Как создать изменения в двух таблицах БД за один запрос на эндпоинт? Рефакторинг

Код написан на Laravel.

Есть две сущности: проект и юзер. При создании юзером проекта должна создаваться новая запись в бд о проекте и меняться два поля в таблице юзера. Функционал реализовал так: эндпоинт post '/api/projects/' делает запрос в StoreController который в свою очередь вызывает метод класса сервиса store, а внутри я уже в транзакции создаю запись о проекте в таблице проектов и в этой же транзакции изменяю поля в таблице юзеров. Вроде все хорошо.

НО!

Я изменяю в одном методе сразу две таблицы бд, что вообще атата как нехорошо.

Вопрос: как сделать правильно и хорошо, по всем солидам и бэст практис, как завещал дядя Боб?

Есть три варианта решения, которые я вижу:

  • Оставить все как есть, но внутренний сноб не даст спать по ночам.
  • Запускать событие внутри транзакции, но я не знаю как себя поведет событие внутри транзакции. Например возможен ли такой вариант, что запись о проекте внутри транзакции создастся, а на обработке события база упадет/откажет/крякнет/sqlerror и запись о проекте будет, а изменений в юзере нет?
  • Отлавливать eloquent события created бд при создании записи о проекте и в обработчике изменять юзера внутри новой транзакции. Но вопрос всплывший ранее имеет место и здесь.

Прошу помочь, внутренний сноб не дает спать вторые сутки.

Спасибо.


Ответы (0 шт):