Отменённый заказ смогли оплатить, потому что проверку статуса забыли в одном сервисе
У Order только публичные свойства с set. Изменение статуса выполняют OrderService, PaymentService, AdminService и импорт, каждый со своими проверками. В новом PromoService проверку забыли, и отменённые заказы начали переходить в статус «оплачен».
Как защитить правила изменения статуса?
- Перенести переходы в методы сущности с проверкой правил
- Добавить проверку статуса в PromoService
- Написать регламент для разработчиков
- Проверять статус триггером в базе данных
