Опять рассмотрим tasks#create
экшен.
В экшене 3 разных логики, которые выполняются последовательно:
- валидация данных - необходимый шаг;
- сохраниение таска - необходимый шаг, если какая-то ошибка, необходимо возвращать failed значение;
- отправка нотификаций - мы не хотим, что бы наша транзакия не выполнялась, если отправка нотификации не выполнится;
Поэтому напишем нашу транзакцию. Так же мы будем использовать Either монаду для возвращения статуса шага транзакции. Right
для успешного, Left
- не успешного: