State

Класи що визначають бізнес логіку проведеня тендерів/планів/контрактів etc, фактично реалізуючи BPMN та sequence діаграми надані БА. StateClasses можуть управляти/визначати модель даних, необхідний для кожної дії, та серіалізатор відповіді (напр. повний або неповний)

Приклад базового State класу:

class BaseState:
    def __init__(self, request):
        self.request = request

    def status_up(self, before, after, data):
        assert before != after, "Statuses must be different"

    def on_post(self, data):
        self.always(data)

    def on_patch(self, before, after):
        if "status" in after and before.get("status") != after["status"]:
            self.status_up(before.get("status"), after["status"], after)
        self.always(after)

    def always(self, data):  # post or patch
        pass

Приклад:

class ObjectState(BaseState):
    should_do_something: bool = False
    something_to_return: int = 42

    def on_patch(self, before, after):
        self.do_something()

    def status_up(self, before, after, data):
        super().status_up(before, after, data)
        if after == "active":
            self.do_something_else(data)

    def do_something(self):
        if self.should_do_something:
            # do something
            return self.something_to_return

    def do_something_else(self, data):
        # do something else
        pass

При реалізації похідних стейт класів, наприклад для різних типів тендерів, класи що наслідуються не мають містити реалізації бізнес логіки а мають конфігурувати core класи (у випадках коли спеціфічна функціональність не реалізована за допомогою конфігурації об’єкта)

Приклад:

class BelowThresholdObjectState(ObjectState):
    should_do_something: bool = True


class RequestForProposalObjectState(ObjectState):
    should_do_something: bool = True
    something_to_return: int = 10

TODO

Текст