Подход к созданию рабочего процесса Django Rest Framework (DRF) - PullRequest
0 голосов
/ 20 сентября 2018

Я создаю бизнес-приложение, которое будет поддерживать несколько продуктов Loan.

, например, для: Home Loan, Car Loan, Personal Loan, E-commerce Loan.

Основные важные шагиявляются:

  1. Включение (генерирование заявки)
  2. Информация о пользователе (и подтверждение)
  3. Информация о кредите (кредитоспособность)
  4. Выплата

Пример бизнес-потока:

  1. Клиент входит на борт, регистрирует свой номер мобильного телефона, проверяет его с помощью OTP

  2. заполняет свою личную информацию (подтверждает ее)

  3. предоставляет сумму кредита

  4. проверяет достоверность кредита

  5. Распределение средств (после XYZ-проверок)

  6. Предоставление реквизитов банковского счета

  7. Проверка банковского счета (только после того, как у вас есть информация abc)

  8. Do eKYC

  9. Оплата

Теперь я строю то же самое, используя DjanПерейти REST Framework для создания веб-API.Однако есть проблема.

В другом нашем продукте поток может быть другим.Step 4 и Step 6 можно поменять местами, но Step 7 необходимо выполнить в той же позиции.По сути, у меня должна быть гибкость для перестановки действий (узлов).

На данный момент написанные API (хотя и модульные) относятся только к одному продукту.Как я могу использовать DRF как подход рабочего процесса?или используйте любую библиотеку поверх DRF, которая может управлять потоком.

1 Ответ

0 голосов
/ 27 сентября 2018

У нас был похожий сценарий использования, и мы использовали библиотеку потоков, которая собирала весь рабочий поток на основе потока, управляемого условиями.

Вы можете посмотреть на Viewflow: https://github.com/viewflow/viewflow

По сути, это похоже наустановка потока и использование условия для направления и перенаправления на другой механизм.На их простой странице быстрого запуска рассказывается, как этого добиться: http://docs.viewflow.io/viewflow_quickstart.html

Я только что попробовал поток образцов в вашем случае:

class CustomerProcessFlow(Flow):
    process_class = CustomerProcess

    start = (
        flow.Start(
            views.CustomerOnBoardView # Let's say this is your customer onboard view
            fields=["customer_name", "customer_address", "customer_phone"]
        ).Permission(
            auto_create=True
        ).Next(this.validate_customer)
    )

    validate_customer = (
        flow.View(
            views.ValidateCustomerDataView # Validation for customer data,
            fields=["approved"]
        ).Permission(
            auto_create=True
        ).Next(this.loan_amount)
    )

    loan_amount = (
        flow.View(
            views.LoanView # Provide Loan
            fields=["loan_amount"]
        ).Permission(
            auto_create=True
        ).Next(this.check_customer_association)
    )

    check_customer_association = (
        flow.If(lambda customer_association: ! customer.type.normal)
        .Then(this.step_4_6)
        .Else(this.step_6_4)
    )

    step_4_6 = (
        flow.Handler ( this.check_load_credibility_data )
        .Next( this.provide_bank_details_data )
    )

    step_6_4 = (
        flow.Handler( this.provide_bank_details_data )
        .Next(this.check_load_credibility)
    )

    this.check_load_credibility = (
        flow.Handler( this.check_load_credibility_data )
        .Next( this.end )
    )

    this.provide_bank_details_data = (
        flow.Handler( this.provide_bank_details_data )
        .Next(this.end)
    )

    end = flow.End()

    def check_load_credibility_data(self, customer):
        # Load credibility

    def provide_bank_details_data(self, customer):
        # Bank Details

Пример можно увидеть здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...