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; } /** * @deprecated */ export interface Privileges { good: ServiceType, discount: number; } /** * @deprecated */ export interface Discount { id: number; name: string; endless: boolean; from: string; dueTo: string; privileges: Array; 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;} } }