Определите доменное исключение с исходным и целевым статусом и поднимайте его до изменения состояния. Оно должно описывать бизнес-ошибку, а не зависеть от конкретного HTTP-фреймворка.
Реализуйте пользовательское исключение для недопустимого перехода статуса заказа.
Определите доменное исключение с исходным и целевым статусом и поднимайте его до изменения состояния. Оно должно описывать бизнес-ошибку, а не зависеть от конкретного HTTP-фреймворка.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Определите доменное исключение с исходным и целевым статусом и поднимайте его до изменения состояния. Оно должно описывать бизнес-ошибку, а не зависеть от конкретного HTTP-фреймворка.
Пример:
class InvalidOrderTransition(ValueError):
def __init__(self, current, target):
self.current = current
self.target = target
super().__init__(f'Переход {current} -> {target} запрещён')
def validate_transition(current, target, allowed):
if target not in allowed.get(current, set()):
raise InvalidOrderTransition(current, target)
Таблицу allowed задают по правилам продукта. В web-слое исключение преобразуют в согласованный ответ, а конкурентную смену статуса отдельно защищают транзакцией и версией. Сам класс исключения гонку не устраняет.