Skip to content

Commit

Permalink
rename discount to promotion
Browse files Browse the repository at this point in the history
  • Loading branch information
wsderte committed Aug 2, 2023
1 parent 0b7c534 commit 41f4b64
Show file tree
Hide file tree
Showing 70 changed files with 1,350 additions and 510 deletions.
29 changes: 29 additions & 0 deletions adapters/bonusprogram/BonusAdapter.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import UserBonusTransaction from "../../models/UserBonusTransaction";
import User from "../../models/User";
type InitBonusAdapter = {
id: string;
};
interface optionalId {
id?: string;
}
interface BonusTransaction extends Pick<UserBonusTransaction, "type" | "group" | "amount" | "customData">, optionalId {
}
export default abstract class BonusAdapter {
readonly InitBonusAdapter: InitBonusAdapter;
protected constructor(InitBonusAdapter: InitBonusAdapter);
/**
* Return user balance
*/
abstract getBalance(user: User): Promise<number>;
/**
* Return user
* @param afterTime - UNIX seconds
*/
abstract getTransactions(user: User, afterTime: string): Promise<BonusTransaction[]>;
/**
* Метод для создания и получения уже существующего Payment адаптера
* @param params - параметры для инициализации
*/
static getInstance(...params: any[]): BonusAdapter;
}
export {};
16 changes: 16 additions & 0 deletions adapters/bonusprogram/BonusAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class BonusAdapter {
constructor(InitBonusAdapter) {
this.InitBonusAdapter = InitBonusAdapter;
BonusProgram.alive(this);
}
/**
* Метод для создания и получения уже существующего Payment адаптера
* @param params - параметры для инициализации
*/
static getInstance(...params) {
return BonusAdapter.prototype;
}
}
exports.default = BonusAdapter;
40 changes: 40 additions & 0 deletions adapters/bonusprogram/BonusAdapter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import UserBonusTransaction from "../../models/UserBonusTransaction"
import User from "../../models/User"

type InitBonusAdapter = {
id: string
}

interface optionalId {id?: string}
interface BonusTransaction extends Pick<UserBonusTransaction, "type" | "group" | "amount" | "customData" > , optionalId {}


export default abstract class BonusAdapter {
public readonly InitBonusAdapter: InitBonusAdapter;

protected constructor(InitBonusAdapter: InitBonusAdapter) {
this.InitBonusAdapter = InitBonusAdapter;
BonusProgram.alive(this);
}



/**
* Return user balance
*/
public abstract getBalance(user: User): Promise<number>;

/**
* Return user
* @param afterTime - UNIX seconds
*/
public abstract getTransactions(user: User, afterTime: string): Promise<BonusTransaction[]>;

/**
* Метод для создания и получения уже существующего Payment адаптера
* @param params - параметры для инициализации
*/
static getInstance(...params): BonusAdapter {
return BonusAdapter.prototype;
}
}
5 changes: 2 additions & 3 deletions adapters/captcha/default/pow.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,10 @@ class POW extends CaptchaAdapter_1.default {
let attempt = 0;
// Tasks garbage collect
Object.keys(POW.taskStorage).forEach((item) => {
var _a, _b;
if (POW.taskStorage[item]) {
if (((_a = POW.taskStorage[item]) === null || _a === void 0 ? void 0 : _a.time) < Date.now() - 30 * 60 * 1000)
if (POW.taskStorage[item]?.time < Date.now() - 30 * 60 * 1000)
delete (POW.taskStorage[item]);
if (((_b = POW.taskStorage[item]) === null || _b === void 0 ? void 0 : _b.label) === label)
if (POW.taskStorage[item]?.label === label)
attempt++;
}
});
Expand Down
2 changes: 1 addition & 1 deletion adapters/discount/AbstractDiscount.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export default abstract class AbstractDiscountHandler {
abstract name: string;
abstract isPublic: boolean;
abstract description?: string;
abstract configDiscount: IconfigDiscount;
abstract configDiscount?: IconfigDiscount;
abstract concept: string[];
abstract externalId?: string;
abstract condition?(arg1: Group | Dish | Order): Promise<boolean>;
Expand Down
38 changes: 0 additions & 38 deletions adapters/discount/AbstractDiscountAdapter.ts

This file was deleted.

20 changes: 20 additions & 0 deletions adapters/discount/AbstractPromotion.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { IconfigDiscount } from "../../interfaces/ConfigDiscount";
import Order from "../../models/Order";
import User from '@webresto/core/models/User';
import Group from "../../models/Group";
import Dish from "../../models/Dish";
export default abstract class AbstractPromotionHandler {
/** unique id */
abstract id: string;
abstract isJoint: boolean;
abstract name: string;
abstract isPublic: boolean;
abstract description?: string;
abstract configDiscount?: IconfigDiscount;
abstract concept: string[];
abstract externalId?: string;
abstract condition?(arg1: Group | Dish | Order): boolean;
abstract action?(order: Order): Promise<void>;
abstract displayGroup?(group: Group, user?: string | User): Promise<Group[]>;
abstract displayDish?(dish: Dish, user?: string | User): Promise<Dish[]>;
}
5 changes: 5 additions & 0 deletions adapters/discount/AbstractPromotion.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class AbstractPromotionHandler {
}
exports.default = AbstractPromotionHandler;
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import User from '@webresto/core/models/User';
import Group from "../../models/Group";
import Dish from "../../models/Dish";

export default abstract class AbstractDiscountHandler {
export default abstract class AbstractPromotionHandler {
/** unique id */
public abstract id: string;

Expand All @@ -23,14 +23,15 @@ export default abstract class AbstractDiscountHandler {

public abstract description?: string;

public abstract configDiscount: IconfigDiscount;
// TODO: remove
public abstract configDiscount?: IconfigDiscount;

public abstract concept: string[];

// id for outside system
public abstract externalId?: string;

public abstract condition?(arg1: Group | Dish | Order): Promise<boolean>
public abstract condition?(arg1: Group | Dish | Order): boolean

public abstract action?(order: Order): Promise<void>;

Expand Down
31 changes: 31 additions & 0 deletions adapters/discount/AbstractPromotionAdapter.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import Order from "../../models/Order";
import AbstractPromotionHandler from "./AbstractPromotion";
import Group from '@webresto/core/models/Group';
import Dish from '@webresto/core/models/Dish';
import { IconfigDiscount } from "@webresto/core/interfaces/ConfigDiscount";
import { PromotionAdapter } from "@webresto/core/adapters/discount/default/promotionAdapter";
import Promotion from '@webresto/core/models/Promotion';
export default abstract class AbstractPromotionHandlerINSTANCE {
static promotions: {
[key: string]: AbstractPromotionHandler;
};
abstract processOrder(order: Order): Promise<void>;
abstract displayDish(dish: Dish): Promise<AbstractPromotionHandler | undefined>;
abstract displayGroup(group: Group): Promise<AbstractPromotionHandler | undefined>;
static filterByConcept: (concept: string) => Promise<Promotion[]>;
static filterPromotions: (promotionsByConcept: Promotion[], target: Group | Dish | Order) => Promise<Promotion[] | undefined>;
static filterByCondition: (promotions: Promotion[], target: Group | Dish | Order) => Promise<Promotion[]>;
static recreatePromotionHandler: (promotionToAdd: AbstractPromotionHandler) => Promise<void>;
static getAllConcept: (concept: string[]) => Promise<AbstractPromotionHandler[]>;
abstract getActivePromotionsIds(): string[];
static clearOfPromotion: (orderId: any) => Promise<void>;
static applyPromotion: (orderId: any, spendPromotion: IconfigDiscount, promotionId: any) => Promise<void>;
static initialize: (initParams?: {
[key: string]: string | number | boolean;
}) => PromotionAdapter;
abstract addPromotionHandler(promotionToAdd: AbstractPromotionHandler): Promise<void>;
static getPromotionHandlerById: (id: string) => Promise<AbstractPromotionHandler | undefined>;
static getInstance: (initParams?: {
[key: string]: string | number | boolean;
}) => AbstractPromotionHandlerINSTANCE;
}
5 changes: 5 additions & 0 deletions adapters/discount/AbstractPromotionAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class AbstractPromotionHandlerINSTANCE {
}
exports.default = AbstractPromotionHandlerINSTANCE;
38 changes: 38 additions & 0 deletions adapters/discount/AbstractPromotionAdapter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import Order from "../../models/Order"
import AbstractPromotionHandler from "./AbstractPromotion";
import Group from '@webresto/core/models/Group';
import Dish from '@webresto/core/models/Dish';
import { IconfigDiscount } from "@webresto/core/interfaces/ConfigDiscount";
import { PromotionAdapter } from "@webresto/core/adapters/discount/default/promotionAdapter";
import Promotion from '@webresto/core/models/Promotion';

export default abstract class AbstractPromotionHandlerINSTANCE {
static promotions: { [key: string]: AbstractPromotionHandler};

public abstract processOrder(order: Order): Promise<void>;
public abstract displayDish(dish: Dish): Promise<AbstractPromotionHandler | undefined>;
public abstract displayGroup(group: Group): Promise<AbstractPromotionHandler | undefined>;

public static filterByConcept:(concept: string) => Promise<Promotion[]>;
public static filterPromotions:(promotionsByConcept: Promotion[], target: Group | Dish | Order) => Promise<Promotion[] | undefined>;
public static filterByCondition:(promotions: Promotion[], target: Group | Dish | Order)=> Promise<Promotion[]>;

public static recreatePromotionHandler:(promotionToAdd: AbstractPromotionHandler) => Promise<void>;

public static getAllConcept:(concept: string[]) => Promise<AbstractPromotionHandler[]>;

public abstract getActivePromotionsIds(): string[];
public static clearOfPromotion:(orderId: any) => Promise<void>;
public static applyPromotion: (orderId: any, spendPromotion: IconfigDiscount, promotionId: any) => Promise<void>;
public static initialize:(initParams?: {
[key: string]: string | number | boolean;
}) => PromotionAdapter;

public abstract addPromotionHandler(promotionToAdd: AbstractPromotionHandler): Promise<void>;

public static getPromotionHandlerById:(id: string) => Promise<AbstractPromotionHandler | undefined>;

static getInstance:(initParams?: {
[key: string]: string | number | boolean;
})=> AbstractPromotionHandlerINSTANCE;
}
8 changes: 4 additions & 4 deletions adapters/discount/default/configuredDiscount.d.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import AbstractDiscountHandler from "../AbstractDiscount";
import AbstractPromotionHandler from "../AbstractPromotion";
import { IconfigDiscount } from "../../../interfaces/ConfigDiscount";
import User from '@webresto/core/models/User';
import Group from './../../../models/Group';
import Dish from './../../../models/Dish';
import Order from '@webresto/core/models/Order';
export default class configuredDiscount extends AbstractDiscountHandler {
constructor(discount: AbstractDiscountHandler, config?: IconfigDiscount);
export default class configuredDiscount extends AbstractPromotionHandler {
constructor(discount: AbstractPromotionHandler, config?: IconfigDiscount);
private config;
id: string;
isJoint: boolean;
Expand All @@ -15,7 +15,7 @@ export default class configuredDiscount extends AbstractDiscountHandler {
concept: string[];
configDiscount: IconfigDiscount;
externalId: string;
condition(arg: Group | Dish | Order): Promise<boolean>;
condition(arg: Group | Dish | Order): boolean;
action(order: Order): Promise<void>;
displayGroup(group: Group, user?: string | User): Promise<Group[]>;
displayDish(dish: Dish, user?: string | User): Promise<Dish[]>;
Expand Down
45 changes: 19 additions & 26 deletions adapters/discount/default/configuredDiscount.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// import { WorkTime } from "@webresto/worktime";
const AbstractDiscount_1 = require("../AbstractDiscount");
const discountAdapter_1 = require("./discountAdapter");
const AbstractPromotion_1 = require("../AbstractPromotion");
const promotionAdapter_1 = require("./promotionAdapter");
const findModelInstance_1 = require("../../../libs/findModelInstance");
class configuredDiscount extends AbstractDiscount_1.default {
class configuredDiscount extends AbstractPromotion_1.default {
constructor(discount, config) {
super();
this.config = {};
Expand All @@ -16,37 +16,30 @@ class configuredDiscount extends AbstractDiscount_1.default {
this.description = discount.description;
this.concept = discount.concept;
this.configDiscount = discount.configDiscount;
// this.enable= discount.enable;
// this.isDeleted= discount.isDeleted;
// this.sortOrder= discount.sortOrder;
// this.productCategoryDiscounts= discount.productCategoryDiscounts;
// this.worktime= discount.worktime;
// this.createdByUser = discount.createdByUser;
this.externalId = discount.externalId;
}
// public enable: boolean;
// public isDeleted: boolean;
// public sortOrder: number;
// public productCategoryDiscounts: any;
// public hash?: string;
// public worktime: WorkTime[];
// interface order, dish, group
//conditionDish, conditionGroup,
async condition(arg) {
if (await (0, findModelInstance_1.default)(arg) === "Order" && this.concept.includes(arg.concept)) {
return Promise.resolve(true);
condition(arg) {
if ((0, findModelInstance_1.default)(arg) === "Order" && this.concept.includes(arg.concept)) {
// Order.populate()
return true;
}
if (await (0, findModelInstance_1.default)(arg) === "Dish" && this.concept.includes(arg.concept)) {
return Promise.resolve(true);
if ((0, findModelInstance_1.default)(arg) === "Dish" && this.concept.includes(arg.concept)) {
//@ts-ignore
if (this.config.dishes.includes(arg.name)) {
return true;
}
}
if (await (0, findModelInstance_1.default)(arg) === "Group" && this.concept.includes(arg.concept)) {
return Promise.resolve(true);
if ((0, findModelInstance_1.default)(arg) === "Group" && this.concept.includes(arg.concept)) {
//@ts-ignore
if (this.config.groups.includes(arg.name)) {
return true;
}
}
return Promise.resolve(false);
return false;
}
async action(order) {
console.log(this.config + " action");
return await discountAdapter_1.DiscountAdapter.applyDiscount(order.id, this.config, this.id);
return await promotionAdapter_1.PromotionAdapter.applyPromotion(order.id, this.config, this.id);
// return Promise.resolve()
}
async displayGroup(group, user) {
Expand Down
Loading

0 comments on commit 41f4b64

Please sign in to comment.