"privilegeId":"p1",// не знаю, стоит ли тут оставлять массив products, но на всякий случай оставлю. т.е. скидка, при срабатывании, применяется к этой привилегии в корзине, т.е. умножает её сумму на factor
"description":"Скидка на сумму стоимостей товаров, принадлежащих сервису шаблонизации, от 1000 р",
"conditionType":"service",
"layer":2,
"condition":{
"service":{
"id":"templategen",
"value":1000
}
},
"target":{
"service":"templategen",
"factor":0.996
}
},
{
"_id":"id27",
"name":"Шаблонизатор 2",
"description":"Скидка на сумму стоимостей товаров, принадлежащих сервису шаблонизации, от 5000 р",
"conditionType":"service",
"layer":2,
"condition":{
"service":{
"id":"templategen",
"value":5000
}
},
"target":{
"service":"templategen",
"factor":0.983
}
},
{
"_id":"id28",
"name":"Опросник 1",
"description":"Скидка на сумму стоимостей товаров, принадлежащих сервису опросника, от 2000 р",
"conditionType":"service",
"layer":2,
"condition":{
"service":{
"id":"squiz",
"value":2000
}
},
"target":{
"service":"squiz",
"factor":0.983
}
},
{
"_id":"id29",
"name":"Опросник 2",
"description":"Скидка на сумму стоимостей товаров, принадлежащих сервису опросника, от 6000 р",
"conditionType":"service",
"layer":2,
"condition":{
"service":{
"id":"squiz",
"value":6000
}
},
"target":{
"service":"squiz",
"factor":0.969
}
},
{
"_id":"id30",
"name":"Сокращатель 1",
"description":"Скидка на сумму стоимостей товаров, принадлежащих сервису сокращателя, от 500 р",
"conditionType":"service",
"layer":2,
"condition":{
"service":{
"id":"dwarfener",
"value":500
}
},
"target":{
"service":"dwarfener",
"factor":0.99
}
},
{
"_id":"id31",
"name":"Сокращатель 2",
"description":"Скидка на сумму стоимостей товаров, принадлежащих сервису сокращателя, от 2500 р",
"conditionType":"service",
"layer":2,
"condition":{
"service":{
"id":"dwarfener",
"value":2500
}
},
"target":{
"service":"dwarfener",
"factor":0.96
}
},
{
"_id":"id32",
"name":"НКО",
"description":"Скидка всем подтвердившим статус НКО. Перекрывает ВСЕ остальные скидки. Если эта скидка срабатывает, остальные можно не вычислять. Т.е. если на уровне 0 находится какая-лидо скидка для выданных условий, просто суммируем корзину и применяем к сумме указанный множитель, после чего прекращаем процесс рассчёта",
"conditionType":"userType",
"layer":0,
"condition":{
"userType":"nko"
},
"target":{
"IsAllProducts":true,
"factor":0.2
},
"overwhelm":true
},
{
"_id":"id33",
"name":"Промокод На АБ тесты",
"description":"Скидка, полученная конкретным юзером, после введения промокода. Заменяет собой не промокодовую",
"coupon":"ABCD",// на мой вкус, стоит при активации промокода создавать скидку, привязанную к юзеру по айдишнику, и удалять после использования. т.е. кондишн не по coupon, а по
"Amount":1,// нужно ввести количество, потому что у нас может смениться стоимость одной единицы привилегии, но при этом не поменяться логика скидки, потому что она привязана к количеству единиц привилегии. т.е. чтобы при изменении цены не появились скидки "от 27 дней безлимита" или "от 117 генераций"
"Price":1.0// если указан прайс, то слои 1 и 2 не применяются, если они overwhelm == false. Т.е. промокоды и скидки на тип юзера всё ещё работают. необходимо для функционирования тарифов, созданных менеджером. для пущщей понятности, тариф создаётся в рамках одного сервиса и если взят готовый тариф, то кастомный на этот сервис сделать уже нельзя, следуя логике "если тебя не устраивает готовый тариф - делай кастомный, не нужно брать готовый и добирать туда недостающего в рамках одной оплаты". как вариант, можно всегда передавать прайс, просто добавить поле кастом. короче, предложенное решение может быть неоптимальным, приведено оно только для того, чтобы показать возможный сценарий.
]// история про то, как получилось получить скидку за сервис
}
},
{
"input":{
"UserInformation":{
"ID":"buddy",
"Type":"",
"PurchasesAmount":21522.12
},
"Products":[
{
"ID":"p1",
"Amount":3000,
},
{
"ID":"p2",
"Amount":3000,
},
{
"ID":"p5",
"Amount":300,
},
{
"ID":"p6",
"Amount":100,
},
{
"ID":"p7",
"Amount":400,
}
]
},
"expect":{
"price":2398.53,
"envolvedDiscounts":[
"id8.rev",
"id10",
"id19",
"id23",
"id25",
"id26",
"id30",
"id1"
]// две скидки за сервис
}
},
{
"input":{
"UserInformation":{
"ID":"buddy",
"Type":"",
"PurchasesAmount":23920.65
},
"Products":[
{
"ID":"p1",
"Amount":3000,
},
{
"ID":"p2",
"Amount":3000,
},
{
"ID":"p5",
"Amount":300,
},
{
"ID":"p6",
"Amount":100,
},
{
"ID":"p7",
"Amount":400,
}
]
},
"expect":{
"price":2368.68,
"envolvedDiscounts":[
"id8.rev",
"id10",
"id19",
"id33",
"id25",
"id26",
"id30",
"id1"
]// юзер использовал промокод id33. он заменяет скидку на p6 собой. в один момент времени может быть активирован только 1 промокод, т.е. после активации следующего, предыдущий заменяется. но в промокоде может быть несколько скидок. промокоды имеют скидки только на привелеги
}
},
{
"input":{
"UserInformation":{
"ID":"buddy",
"Type":"nko",
"PurchasesAmount":26289.33
},
"Products":[
{
"ID":"p1",
"Amount":3000,
},
{
"ID":"p2",
"Amount":3000,
},
{
"ID":"p5",
"Amount":300,
},
{
"ID":"p6",
"Amount":100,
},
{
"ID":"p7",
"Amount":400,
}
]
},
"expect":{
"price":540,// сложил всю корзину и умножил на показатель скидки