asvechkar
@asvechkar
ruby on rails, angular, MEAN, postgres

Описание модели в json?

В общем интересная задача.
Условия:
Компания предоставляет разные юр услуги.
На сайте на каждую услугу необходима форма заказа.
Все услуги имеют разный набор аттрибутов.
Есть зависимые аттрибуты: например, стоимость услуги зависит от срока выполнения и количества копий документов (цена=стоимость*количество*срок).
В заказ можно добавить несколько услуг.
И вот какая задача:
Нужно сделать конструктор, чтобы контент менеджер сам добавлял на сайт услуги и описывал их свойства. На основе этих свойств будут строиться формы на страницах услуг. При заполнении этих форм данные будут сохранятся в заказе.

Сначала я хотел делать отдельную таблицу под динамические поля (название, тип, код). Но еще непонятно, как делать зависимости полей друг от друга, куда записывать связи и формулы подсчета.

Потом подумал, может просто сделать модель услуги (название, описание), и в описании в формате json описывать все необходимые свойства услуги, связи, функции. А во фронтенде (например, через Angular) парсить json и строить формы для заказа.

Есть идеи?
  • Вопрос задан
  • 1848 просмотров
Пригласить эксперта
Ответы на вопрос 2
@mletov
А если понадобится новая услуга, то программно менять файл json?
По-моему, лучше через БД.
Таблицы: Услуги, Атрибуты, УслугиАтрибуты, Отчеты, ОтчетыЗначенияАтрибутов

Что касается зависимостей, то прежде, чем проектировать, надо рассмотреть варианты, какие типы зависимостей есть. Только арифметические? Атрибуты на форме показываются всегда или может быть так, что некоторые атрибуты показываются только если указано некоторое значение пред атрибута?

Например, можно завести в таблице Атрибуты поле Зависимость
и писать туда что-нибудь типа(A20 + A30) - A40/2, цифры после A - ид атрибутов
Ответ написан
wiz
@wiz
Ортодоксальный хаскелит
В базе jsonb поле, внутри документ схемы. На фронте что-то вроде schemaform.io
Подробное описание стандарта на такие схемы: json-schema.org
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы