207 lines
5.4 KiB
TypeScript
207 lines
5.4 KiB
TypeScript
import { ServiceType, Tariffs } from "./tariff";
|
||
|
||
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
export interface CartSummary {
|
||
mbs: number;
|
||
points: number;
|
||
days: number;
|
||
}
|
||
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
export interface Promocode {
|
||
id: number;
|
||
name: string;
|
||
endless: boolean;
|
||
from: string;
|
||
dueTo: string;
|
||
privileges: Array<Privileges>;
|
||
}
|
||
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
export interface Privileges {
|
||
good: ServiceType,
|
||
discount: number;
|
||
}
|
||
|
||
/**
|
||
* @deprecated
|
||
*/
|
||
export interface Discount {
|
||
id: number;
|
||
name: string;
|
||
endless: boolean;
|
||
from: string;
|
||
dueTo: string;
|
||
privileges: Array<Privileges>;
|
||
active: boolean;
|
||
basketMore: number;
|
||
incomeMore: number;
|
||
toTime: number;
|
||
toCapacity: number;
|
||
}
|
||
|
||
// New types from snippet
|
||
export namespace Cart {
|
||
interface DiscountBase {
|
||
_id: string;
|
||
name: string;
|
||
description: string;
|
||
/**
|
||
* Этап применения скидки
|
||
*/
|
||
layer: number;
|
||
}
|
||
|
||
export interface PurchasesAmountDiscount extends DiscountBase {
|
||
conditionType: "purchasesAmount";
|
||
condition: {
|
||
purchasesAmount: number;
|
||
};
|
||
/**
|
||
* Множитель, на который умножается сумма при применении скидки
|
||
*/
|
||
factor: number;
|
||
}
|
||
|
||
export interface CartPurchasesAmountDiscount extends DiscountBase {
|
||
conditionType: "cartPurchasesAmount";
|
||
condition: {
|
||
cartPurchasesAmount: number;
|
||
};
|
||
/**
|
||
* Множитель, на который умножается сумма при применении скидки
|
||
*/
|
||
factor: number;
|
||
}
|
||
|
||
export interface PrivilegeDiscount extends DiscountBase {
|
||
conditionType: "privilege";
|
||
condition: {
|
||
privilege: {
|
||
id: string;
|
||
/**
|
||
* Скидка применяется, если значение больше или равно этому значению
|
||
*/
|
||
value: number;
|
||
};
|
||
};
|
||
target: {
|
||
products: Array<{
|
||
/**
|
||
* TODO Судя по сниппету, это id привелегий, но названо "продукт"
|
||
*/
|
||
productId: string;
|
||
/**
|
||
* Множитель, на который умножается сумма при применении скидки
|
||
*/
|
||
factor: number;
|
||
}>;
|
||
};
|
||
}
|
||
|
||
export interface ServiceDiscount extends DiscountBase {
|
||
conditionType: "service";
|
||
condition: {
|
||
service: {
|
||
id: Tariffs.ServiceType;
|
||
/**
|
||
* Скидка применяется, если значение больше или равно этому значению
|
||
*/
|
||
value: number;
|
||
};
|
||
};
|
||
target: {
|
||
service: Tariffs.ServiceType;
|
||
/**
|
||
* Множитель, на который умножается сумма при применении скидки
|
||
*/
|
||
factor: number;
|
||
};
|
||
}
|
||
|
||
export interface UserTypeDiscount extends DiscountBase {
|
||
conditionType: "userType";
|
||
condition: {
|
||
userType: string;
|
||
};
|
||
target: {
|
||
IsAllProducts: boolean;
|
||
/**
|
||
* Множитель, на который умножается сумма при применении скидки
|
||
*/
|
||
factor: number;
|
||
};
|
||
overwhelm: boolean;
|
||
}
|
||
|
||
export interface UserDiscount extends DiscountBase {
|
||
conditionType: "user";
|
||
condition: {
|
||
coupon: string;
|
||
user: string;
|
||
};
|
||
target: {
|
||
products: Array<{
|
||
/**
|
||
* TODO Судя по сниппету, это id привелегий, но названо "продукт"
|
||
*/
|
||
productId: string;
|
||
/**
|
||
* Множитель, на который умножается сумма при применении скидки
|
||
*/
|
||
factor: number;
|
||
}>;
|
||
};
|
||
overwhelm: boolean;
|
||
}
|
||
|
||
export type AnyDiscount =
|
||
| PurchasesAmountDiscount
|
||
| CartPurchasesAmountDiscount
|
||
| PrivilegeDiscount
|
||
| ServiceDiscount
|
||
| UserTypeDiscount
|
||
| UserDiscount;
|
||
|
||
export interface Promocode {
|
||
id: number;
|
||
name: string;
|
||
endless: boolean;
|
||
from: string;
|
||
dueTo: string;
|
||
privileges: Tariffs.Privilege[];
|
||
}
|
||
|
||
export interface CartItem {
|
||
item: Tariffs.Tariff | Tariffs.Package;
|
||
/**
|
||
* Посчитанная цена пункта корзины
|
||
*/
|
||
price: number;
|
||
}
|
||
|
||
/**
|
||
* Пункт корзины с уже примененными скидками
|
||
*/
|
||
export interface CartItemTotal {
|
||
/**
|
||
* Массив с id примененных скидок
|
||
*/
|
||
envolvedDiscounts: string[];
|
||
totalPrice: number;
|
||
item: Tariffs.Tariff | Tariffs.Package;
|
||
}
|
||
|
||
export interface CartTotal {
|
||
items: CartItemTotal[];
|
||
totalPrice: number;
|
||
priceByService: { [Key in Tariffs.ServiceType]: number;}
|
||
}
|
||
} |