fix and rename types

This commit is contained in:
nflnkr 2023-02-28 16:13:55 +03:00
parent 4e8a8e4276
commit b206811b43
2 changed files with 48 additions and 40 deletions

@ -39,7 +39,7 @@ export interface Discount {
toCapacity: number; toCapacity: number;
} }
// New types from snippet
export namespace Cart { export namespace Cart {
interface DiscountBase { interface DiscountBase {
_id: string; _id: string;
@ -78,8 +78,7 @@ export namespace Cart {
}; };
target: { target: {
products: Array<{ products: Array<{
/** TODO Судя по сниппету, это id привелегий, но названо "продукт" */ privilegeId: string;
productId: string;
/** Множитель, на который умножается сумма при применении скидки */ /** Множитель, на который умножается сумма при применении скидки */
factor: number; factor: number;
}>; }>;
@ -123,8 +122,7 @@ export namespace Cart {
}; };
target: { target: {
products: Array<{ products: Array<{
/** TODO Судя по сниппету, это id привелегий, но названо "продукт" */ privilegeId: string;
productId: string;
/** Множитель, на который умножается сумма при применении скидки */ /** Множитель, на который умножается сумма при применении скидки */
factor: number; factor: number;
}>; }>;
@ -150,7 +148,7 @@ export namespace Cart {
} }
export interface CartItem { export interface CartItem {
item: Tariffs.Tariff; tariff: Tariffs.Tariff;
/** Посчитанная цена пункта корзины */ /** Посчитанная цена пункта корзины */
price: number; price: number;
} }
@ -160,13 +158,20 @@ export namespace Cart {
/** Массив с id примененных скидок */ /** Массив с id примененных скидок */
envolvedDiscounts: string[]; envolvedDiscounts: string[];
totalPrice: number; totalPrice: number;
item: Tariffs.Tariff; tariff: Tariffs.Tariff;
} }
export type ServiceToPriceMap = {
[Key in Tariffs.ServiceType]: {
customTariffs: number;
defaultTariffs: number;
}
};
export interface CartTotal { export interface CartTotal {
items: CartItemTotal[]; items: CartItemTotal[];
totalPrice: number; totalPrice: number;
priceByService: { [Key in Tariffs.ServiceType]: number; }; priceByService: ServiceToPriceMap;
envolvedCartDiscounts: string[]; envolvedCartDiscounts: string[];
} }
} }

@ -153,7 +153,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p1", // не знаю, стоит ли тут оставлять массив products, но на всякий случай оставлю. т.е. скидка, при срабатывании, применяется к этой привилегии в корзине, т.е. умножает её сумму на factor "privilegeId": "p1", // не знаю, стоит ли тут оставлять массив products, но на всякий случай оставлю. т.е. скидка, при срабатывании, применяется к этой привилегии в корзине, т.е. умножает её сумму на factor
"factor": 0.975 "factor": 0.975
} }
] ]
@ -174,7 +174,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p1", "privilegeId": "p1",
"factor": 0.975 "factor": 0.975
} }
] ]
@ -195,7 +195,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p1", "privilegeId": "p1",
"factor": 0.93 "factor": 0.93
} }
] ]
@ -216,7 +216,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p2", "privilegeId": "p2",
"factor": 0.995 "factor": 0.995
} }
] ]
@ -237,7 +237,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p2", "privilegeId": "p2",
"factor": 0.98 "factor": 0.98
} }
] ]
@ -258,7 +258,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p2", "privilegeId": "p2",
"factor": 0.945 "factor": 0.945
} }
] ]
@ -279,7 +279,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p3", "privilegeId": "p3",
"factor": 0.97 "factor": 0.97
} }
] ]
@ -300,7 +300,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p3", "privilegeId": "p3",
"factor": 0.93 "factor": 0.93
} }
] ]
@ -321,7 +321,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p3", "privilegeId": "p3",
"factor": 0.85 "factor": 0.85
} }
] ]
@ -342,7 +342,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p4", "privilegeId": "p4",
"factor": 0.98 "factor": 0.98
} }
] ]
@ -363,7 +363,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p4", "privilegeId": "p4",
"factor": 0.96 "factor": 0.96
} }
] ]
@ -384,7 +384,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p4", "privilegeId": "p4",
"factor": 0.9 "factor": 0.9
} }
] ]
@ -405,7 +405,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p5", "privilegeId": "p5",
"factor": 0.99 "factor": 0.99
} }
] ]
@ -426,7 +426,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p5", "privilegeId": "p5",
"factor": 0.98 "factor": 0.98
} }
] ]
@ -447,7 +447,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p5", "privilegeId": "p5",
"factor": 0.97 "factor": 0.97
} }
] ]
@ -468,7 +468,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p6", "privilegeId": "p6",
"factor": 0.99 "factor": 0.99
} }
] ]
@ -489,7 +489,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p6", "privilegeId": "p6",
"factor": 0.965 "factor": 0.965
} }
] ]
@ -510,7 +510,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p6", "privilegeId": "p6",
"factor": 0.935 "factor": 0.935
} }
] ]
@ -531,7 +531,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p7", "privilegeId": "p7",
"factor": 0.935 "factor": 0.935
} }
] ]
@ -552,7 +552,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p7", "privilegeId": "p7",
"factor": 0.875 "factor": 0.875
} }
] ]
@ -573,7 +573,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p7", "privilegeId": "p7",
"factor": 0.83 "factor": 0.83
} }
] ]
@ -709,7 +709,7 @@ export const exampleCartValues: ExampleCartValues = {
"target": { "target": {
"products": [ "products": [
{ {
"productId": "p6", "privilegeId": "p6",
"factor": 0.5 "factor": 0.5
} }
] ]
@ -763,7 +763,7 @@ export const exampleCartValues: ExampleCartValues = {
}, },
] ]
}, },
"expect": { "expect": { // работает если не учитывать скидки id26, id27 (скидка на templategen от 1000/5000 р.)
"price": 4925.0, "price": 4925.0,
"envolvedDiscounts": [ "envolvedDiscounts": [
"id4" "id4"
@ -794,7 +794,7 @@ export const exampleCartValues: ExampleCartValues = {
} }
] ]
}, },
"expect": { "expect": { // работает если не учитывать скидки id26, id27 (скидка на templategen от 1000/5000 р.)
"price": 5025.32, "price": 5025.32,
"envolvedDiscounts": [ "envolvedDiscounts": [
"id4", "id4",
@ -830,7 +830,7 @@ export const exampleCartValues: ExampleCartValues = {
} }
] ]
}, },
"expect": { "expect": { // работает если не учитывать скидки id26, id27 (скидка на templategen от 1000/5000 р.)
"price": 5223.9, "price": 5223.9,
"envolvedDiscounts": [ "envolvedDiscounts": [
"id4", "id4",
@ -867,7 +867,7 @@ export const exampleCartValues: ExampleCartValues = {
} }
] ]
}, },
"expect": { "expect": { // работает если не учитывать скидки id26, id27 (скидка на templategen от 1000/5000 р.)
"price": 5171.66, "price": 5171.66,
"envolvedDiscounts": [ "envolvedDiscounts": [
"id4", "id4",
@ -965,11 +965,14 @@ export const exampleCartValues: ExampleCartValues = {
"expect": { "expect": {
"price": 750.96, "price": 750.96,
"envolvedDiscounts": [ "envolvedDiscounts": [
"id19", "id19", // p5, layer 1, value > 90, 0.97, pricePerUnit = 0.1
"id23", "id23", // p6, layer 1, value > 50, 0.935, pricePerUnit = 0.7
"id25", "id25", // p7, layer 1, value > 90, 0.83, pricePerUnit = 2
"id30", "id30", // dwarfener, layer 2, value > 500, 0.99
"id1" "id1" // layer 4, purchasesAmount > 10000, 0.99
// TODO Какая-то из скидок id30, id1 не учлась
// expected: (300 * 0.1 * 0.97 + 100 * 0.7 * 0.935 + 400 * 2 * 0.83) * 0.99 = 750.96
// received: (300 * 0.1 * 0.97 + 100 * 0.7 * 0.935 + 400 * 2 * 0.83) * 0.99 * 0.99 = 743.45
] // история про то, как получилось получить скидку за сервис ] // история про то, как получилось получить скидку за сервис
} }
}, },
@ -1094,7 +1097,7 @@ export const exampleCartValues: ExampleCartValues = {
"expect": { "expect": {
"price": 540, // сложил всю корзину и умножил на показатель скидки "price": 540, // сложил всю корзину и умножил на показатель скидки
"envolvedDiscounts": [ "envolvedDiscounts": [
"id30" "id32"
] // юзер подтвердил свой статус НКО, поэтому, не смотря на то что он достиг по лояльности уровня скидки id2, она не применилась, а применилась id32 ] // юзер подтвердил свой статус НКО, поэтому, не смотря на то что он достиг по лояльности уровня скидки id2, она не применилась, а применилась id32
} }
} }