есть базе модель Order неё свойство Order orderItems OrderItem OrderIt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
1. есть в базе модель Order. у неё свойство Order.orderItems = [ OrderItem, OrderItem, ... ].
В OrderItem.selectedOptions строкой записан json объект. вопрос был в том, что перед тем
как использовать свойство OrderItem.selectedOptions его нужно распарсить (потому что он строка).
альтернативный вариант был - создать новый объект в базе, назвав его SelectedOptions,
у которого будут записаны все те свойства, что сейчас хранятся строкой.
решение: лучше на месте, при использовании свойства модели (selectedOptions) парсить её из строки в json,
чем хранить в этом поле ссылку на другую модель, которую нужно будет populat`ить.
выбрал хранить вариант хранить строкой.
2. о создании заведения нового.
а) админ создает кафе,
б) указывает какие категории могут использоваться в меню этого кафе,
в) указывает так-же возможные названия Item`ов (например Cappuccono) для каждой категории которые могут быть в меню
г) указывает какие опции могут быть у этого Item`а (Size, Sugar)
д) указывает какие варианты могут быть у опций (Size: ["Large", "Small", ..] или Sugar: ["0", "1", "2"])
другими словами админ должен составить струтуру, скелет, этого кафе, по которой пользователь сможет сам добавлять
новые Items.
Вопрос: где всё это хранить?
Варианты:
1. хранить эту структуру в свойстве модели кафе (Business), под названием structure или defaultValues. хранить придется
json строкой.
2. создать модель базы Structure или BusinessBone, а в самой модели Business хранить ссылку на эту структуру
чтобы долго не расписывать, покажу наглядно как должна выглядеть модель Structure.
Structure = {
menu: [
{
categoryType: "drink", // это означает что эта струтура Item`ов из категории "drink"
options: [ // устанавливает как должен выглядеть список опций
{
title: "Size",
variantsCount: 3, // кол-во возможных вариантов
variant: { // каждый вариант в этой опции должен соответсвовать структуре
variantTitle: "",
variantCost : "" [ единицы: $ ]
}
},
{
title: "Sugar",
variantsCount: 3,
variant: {
variantTitle: "",
variantCost : ""
}
}
]
}
],
offers: {
loalty: {
maxNumberOfOrderFree: N, // какой максимальный по кол-ву заказ будет бесплатным.
// н-р в этом случае "Каждый N-й заказ бесплатно"
},
special: [
{
cost: "", [ единицы: $] // сумма заказа
discount: "" [ единицы: %] // скидка. н-р "при заказе от 15$ - скидка 5%"
}
]
}
}