Сначала немного контекста, я кодировал «генератор форм», очень похожий на Google Forms, для внутреннего использования в компании, которая проводит несколько типов опросов, все в формате вопрос / ответ. Дизайн БД очень функционально похож на этот (взят из Дизайн базы данных для опроса )
Бэкэнд написан в Python с использованием Django и Django Rest Framework, внешний интерфейс - Angular 9. Некоторые вопросы являются более сложными, чем то, что Google Forms разрешает для нужд компании, например, некоторые вопросы допускают более одного ответа, некоторые ответы имеют «вторичные вопросы», связанные с они и другие вопросы зависят от определенных ответов (т.е. некоторые вопросы должны быть отключены, если определенный ответ не выбран)
Из-за сложности базы данных и, в основном, из-за моего общего недостатка опыта, мое решение в Мне кажется, что интерфейс с возможностью POST к API кажется мне взломанным. Логика вставки c выглядит следующим образом:
- Опрос создан
- Survey_Question создан (вопрос извлечен из специального типа ранее существовавшего «шаблонного» опроса)
- В зависимости от ТИПА Survey_Question (одиночный ответ, множественный ответ и c) создается один или несколько Survey_Question_Answers (OfferedAnswer также извлекается из специального шаблона)
Таблицы Person и Answer являются не используется в моем дизайне
Основная идея c способа кодирования в Angular заключается в следующем:
this.createSurvey().subscribe(survey => {
this.questions.forEach(question => {
question.survey = survey
this.createQuestion(question).subscribe(newQuestion => {
// same logic with answers that belong to this question
})
)}
})
Это основная c сущность вставить логи c. Поскольку я нахожусь в процессе изучения кода, на этом этапе я пришел к выводу, что вложение подписок таким способом не рекомендуется, хотя я извлек их в методы для предотвращения визуального «ада обратного вызова». Несмотря на свою функциональность, теперь я столкнулся с проблемой отсутствия представления о том, как отправить пользователю одно сообщение «Форма успешно сохранена» после успешного создания каждого вопроса через POST, поскольку при использовании не существует определенной последовательности (на мой взгляд) Asyn c называет это так.
Может кто-нибудь указать мне правильное направление, где читать или какие операторы, принадлежащие RX JS, были / подходят для этих типов задач?