Итого у нас с точки зрения bpmn 2 user tasks, 1 service task
Далее что у нас происходит.
1. Стартовали процесс, не важно каким образом
2. UI запрашивает доступные задачи с бекенда, и на основании типа задачи отрисовывает формочку
3. Пользователь заполнил формочку. На ui сформировалось dto для этой формочки и отправилось на бекенд запросом /complete-task(вот тут кстати вопрос как лучше делать, 1 универсальный эндпоинт complete-task или лучше на каждую таску свой эндпоинт, далее приводится пример с универссальным эндпоинтом )
4. На бекенде проверяется есть ли такая задача. Если есть, то для этой задачи:
1) Ищется подходящий класс dto, в объект которого конвертируется полученная json строка.
2) Определяется логика работы с dto для этой задачи. В данном случае создается сущность заявка со всеми полями и кладется в базу.
3) Идет обращение к taskService у камунды. То есть вызывается complite с id текущей таски и переменными. В данном случае переменная - id заявки.
4) Срабатывает task listener, который слушает task complete(Вот здесь уже есть отличие между юзер и сервис таск. Для юзер тасков нету делагатов, поэтому приходится лисенеров подключать). Этот слушатель берет id из процесса, достает заявку по этому id из базы, делает свою валидацию и ставит например статус NEW и записывает в бд новое значение.
5) На ui возращается результат операции, успешно или нет, + id следующих задач, если они появились за это время
5. В камунде срабатывает service task. Здесь ничего интересного, просто выполняется какая то логика. В конечного итоге ставится статус APPROVED.
6. Появляется новая таска. Перед отправкой ее на UI, наполняется необходимыми данными для отображения нужная дтошка и отправляется на ui.
7. После того как сотрудник заполнил данные, все отправляется на бэк, где сначала первым делом обновляется модель, а после чего вызывается complete у taskService для текущей задачи. После выполнения complete отдается ответ на ui.
Так получается?
Я привел пример синхронного взаимодействия. Хочется конечно асинхронности, но сначала хочу при таком раскладе разобраться в сути.