From b345168f17ce595a3ae6dc23f8e597cd63c0c381 Mon Sep 17 00:00:00 2001 From: Xziy Date: Tue, 8 Aug 2023 17:48:40 +0300 Subject: [PATCH] excelent --- adapters/bonusprogram/BonusAdapter.d.ts | 29 ---- adapters/bonusprogram/BonusAdapter.js | 16 -- adapters/bonusprogram/BonusAdapter.ts | 40 ----- adapters/delivery/DeliveryAdapter.d.ts | 2 +- adapters/delivery/DeliveryAdapter.ts | 2 +- adapters/mediafile/MediaFile.d.ts | 13 -- adapters/mediafile/MediaFile.js | 14 -- adapters/mediafile/MediaFile.ts | 17 -- adapters/mediafile/MediaFileConfig.d.ts | 12 -- adapters/mediafile/MediaFileConfig.js | 2 - adapters/mediafile/MediaFileConfig.ts | 12 -- adapters/mediafile/default/im-local.d.ts | 11 -- adapters/mediafile/default/im-local.js | 140 --------------- adapters/mediafile/default/im-local.ts | 161 ------------------ .../promotion/AbstractPromotionAdapter.d.ts | 2 +- .../promotion/AbstractPromotionAdapter.ts | 2 +- index.js | 1 + index.ts | 1 + models/Dish.ts | 1 - models/Group.ts | 1 - models/Order.d.ts | 11 +- models/Order.js | 40 ++++- models/Order.ts | 42 ++++- test/mocks/adapter/RMS.js | 3 +- test/mocks/adapter/RMS.ts | 5 +- test/mocks/adapter/discount.ts | 2 +- 26 files changed, 85 insertions(+), 497 deletions(-) delete mode 100644 adapters/bonusprogram/BonusAdapter.d.ts delete mode 100644 adapters/bonusprogram/BonusAdapter.js delete mode 100644 adapters/bonusprogram/BonusAdapter.ts delete mode 100644 adapters/mediafile/MediaFile.d.ts delete mode 100644 adapters/mediafile/MediaFile.js delete mode 100644 adapters/mediafile/MediaFile.ts delete mode 100644 adapters/mediafile/MediaFileConfig.d.ts delete mode 100644 adapters/mediafile/MediaFileConfig.js delete mode 100644 adapters/mediafile/MediaFileConfig.ts delete mode 100644 adapters/mediafile/default/im-local.d.ts delete mode 100644 adapters/mediafile/default/im-local.js delete mode 100644 adapters/mediafile/default/im-local.ts diff --git a/adapters/bonusprogram/BonusAdapter.d.ts b/adapters/bonusprogram/BonusAdapter.d.ts deleted file mode 100644 index 162c2d35..00000000 --- a/adapters/bonusprogram/BonusAdapter.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import UserBonusTransaction from "../../models/UserBonusTransaction"; -import User from "../../models/User"; -type InitBonusAdapter = { - id: string; -}; -interface optionalId { - id?: string; -} -interface BonusTransaction extends Pick, optionalId { -} -export default abstract class BonusAdapter { - readonly InitBonusAdapter: InitBonusAdapter; - protected constructor(InitBonusAdapter: InitBonusAdapter); - /** - * Return user balance - */ - abstract getBalance(user: User): Promise; - /** - * Return user - * @param afterTime - UNIX seconds - */ - abstract getTransactions(user: User, afterTime: string): Promise; - /** - * Метод для создания и получения уже существующего Payment адаптера - * @param params - параметры для инициализации - */ - static getInstance(...params: any[]): BonusAdapter; -} -export {}; diff --git a/adapters/bonusprogram/BonusAdapter.js b/adapters/bonusprogram/BonusAdapter.js deleted file mode 100644 index 2cda3b90..00000000 --- a/adapters/bonusprogram/BonusAdapter.js +++ /dev/null @@ -1,16 +0,0 @@ -"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; diff --git a/adapters/bonusprogram/BonusAdapter.ts b/adapters/bonusprogram/BonusAdapter.ts deleted file mode 100644 index 4f3c548c..00000000 --- a/adapters/bonusprogram/BonusAdapter.ts +++ /dev/null @@ -1,40 +0,0 @@ -import UserBonusTransaction from "../../models/UserBonusTransaction" -import User from "../../models/User" - -type InitBonusAdapter = { - id: string -} - -interface optionalId {id?: string} -interface BonusTransaction extends Pick , 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; - - /** - * Return user - * @param afterTime - UNIX seconds - */ - public abstract getTransactions(user: User, afterTime: string): Promise; - - /** - * Метод для создания и получения уже существующего Payment адаптера - * @param params - параметры для инициализации - */ - static getInstance(...params): BonusAdapter { - return BonusAdapter.prototype; - } -} diff --git a/adapters/delivery/DeliveryAdapter.d.ts b/adapters/delivery/DeliveryAdapter.d.ts index e8c0cac8..8b91b20d 100644 --- a/adapters/delivery/DeliveryAdapter.d.ts +++ b/adapters/delivery/DeliveryAdapter.d.ts @@ -12,7 +12,7 @@ export default abstract class DeliveryAdapter { abstract calculate(order: Order): Promise; /** * Reset order - * @returns boolean + * @returns void */ abstract reset(order: Order): Promise; } diff --git a/adapters/delivery/DeliveryAdapter.ts b/adapters/delivery/DeliveryAdapter.ts index eae750b6..127f865a 100644 --- a/adapters/delivery/DeliveryAdapter.ts +++ b/adapters/delivery/DeliveryAdapter.ts @@ -17,7 +17,7 @@ export default abstract class DeliveryAdapter { /** * Reset order - * @returns boolean + * @returns void */ public abstract reset(order: Order): Promise; } diff --git a/adapters/mediafile/MediaFile.d.ts b/adapters/mediafile/MediaFile.d.ts deleted file mode 100644 index 45908183..00000000 --- a/adapters/mediafile/MediaFile.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * - */ -export default class MediaFile { - url: string; - name: { - origin: string; - }; - key: string; - constructor(url: string, name: { - origin: string; - }, key: string); -} diff --git a/adapters/mediafile/MediaFile.js b/adapters/mediafile/MediaFile.js deleted file mode 100644 index 3f273d09..00000000 --- a/adapters/mediafile/MediaFile.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * - */ -class MediaFile { - constructor(url, name, key) { - this.url = url; - // TODO: переименовать нейм по идеи это размеры картинок + оригинал (передается оно в images) - this.name = name; - this.key = key; - } -} -exports.default = MediaFile; diff --git a/adapters/mediafile/MediaFile.ts b/adapters/mediafile/MediaFile.ts deleted file mode 100644 index cee6f2df..00000000 --- a/adapters/mediafile/MediaFile.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * - */ -export default class MediaFile { - url: string; - name: { - origin: string; - }; - key: string; - - constructor(url: string, name: { origin: string }, key: string) { - this.url = url; - // TODO: переименовать нейм по идеи это размеры картинок + оригинал (передается оно в images) - this.name = name; - this.key = key; - } -} diff --git a/adapters/mediafile/MediaFileConfig.d.ts b/adapters/mediafile/MediaFileConfig.d.ts deleted file mode 100644 index 466c3e3e..00000000 --- a/adapters/mediafile/MediaFileConfig.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -export default interface MediaFileConfig { - dish: MediaFileConfigInner; - group: MediaFileConfigInner; - adapter: string; -} -interface MediaFileConfigInner { - path: string; - format: string; - imageCount: number; - resize: any[]; -} -export {}; diff --git a/adapters/mediafile/MediaFileConfig.js b/adapters/mediafile/MediaFileConfig.js deleted file mode 100644 index c8ad2e54..00000000 --- a/adapters/mediafile/MediaFileConfig.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/adapters/mediafile/MediaFileConfig.ts b/adapters/mediafile/MediaFileConfig.ts deleted file mode 100644 index b1d18088..00000000 --- a/adapters/mediafile/MediaFileConfig.ts +++ /dev/null @@ -1,12 +0,0 @@ -export default interface MediaFileConfig { - dish: MediaFileConfigInner; - group: MediaFileConfigInner; - adapter: string; -} - -interface MediaFileConfigInner { - path: string; - format: string; - imageCount: number; - resize: any[]; -} diff --git a/adapters/mediafile/default/im-local.d.ts b/adapters/mediafile/default/im-local.d.ts deleted file mode 100644 index b917b9db..00000000 --- a/adapters/mediafile/default/im-local.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import MediaFileAdapter from "../MediaFileAdapter"; -import MediaFileConfig from "../MediaFileConfig"; -export default class LocalMediaFileAdapter extends MediaFileAdapter { - constructor(config: MediaFileConfig); - load(url: string, key: string): Promise<{ - origin: string; - }>; - uploadMediaFile(uploadFile: any, key: string): Promise; - protected download(url: string, key: string, filename: string): Promise; - private loadMediaFiles; -} diff --git a/adapters/mediafile/default/im-local.js b/adapters/mediafile/default/im-local.js deleted file mode 100644 index 75423ea6..00000000 --- a/adapters/mediafile/default/im-local.js +++ /dev/null @@ -1,140 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const MediaFileAdapter_1 = require("../MediaFileAdapter"); -const MediaFile_1 = require("../MediaFile"); -const fs = require("fs"); -const request = require("request"); -const uuid_1 = require("uuid"); -const UUID_NAMESPACE = process.env.UUID_NAMESPACE || "1b671a64-40d5-491e-99b0-da01ff1f3341"; -const IM = require("imagemagick"); -const path = require("path"); -let loadMediaFilesProcess = null; -let loadMediaFilesProcessQueue = []; -// images: { -// adapter: 'imagemagick-local', -// dish: { -// format: process.env.IMAGES_DISH_FILE_FORMAT === undefined ? 'png' : process.env.IMAGES_DISH_FILE_FORMAT, -// path: '/images', -// resize: { -// small: { -// width: process.env.IMAGES_SMALL_SIZE_PX === undefined ? 600 : parseInt(process.env.IMAGES_SMALL_SIZE_PX), -// height: process.env.IMAGES_SMALL_SIZE_PX === undefined ? 600 : parseInt(process.env.IMAGES_SMALL_SIZE_PX) -// }, -// large: { -// width: process.env.IMAGES_LARGE_SIZE_PX === undefined ? 900 : parseInt(process.env.IMAGES_LARGE_SIZE_PX), -// } -// } -// }, -// group: { -// format: process.env.IMAGES_GROUP_FILE_FORMAT === undefined ? 'png' : process.env.IMAGES_GROUP_FILE_FORMAT, -// path: '/imagesG', -// } -// }, -class LocalMediaFileAdapter extends MediaFileAdapter_1.default { - constructor(config) { - super(config); - if (!loadMediaFilesProcess) { - loadMediaFilesProcess = this.loadMediaFiles(); - } - } - async load(url, key) { - sails.log.verbose("MediaFileAdapter > load >", url); - const conf = this.config[key]; - var mediafileExtesion = url.match(/\.([0-9a-z]+)(?=[?#])|(\.)(?:[\w]+)$/gim)[0]; - const filename = conf.path + "/" + (0, uuid_1.v5)(url, UUID_NAMESPACE) + mediafileExtesion; - const name = { - origin: filename, - }; - for (let res in this.config[key].resize) { - name[res] = conf.path + "/" + (0, uuid_1.v5)(url, UUID_NAMESPACE) + "." + conf.format; - } - const mediafile = new MediaFile_1.default(url, name, key); - loadMediaFilesProcessQueue.push(mediafile); - return mediafile.name; - } - uploadMediaFile(uploadFile, key) { - throw new Error("Method not implemented."); - } - download(url, key, filename) { - const prefix = process.cwd() + "/.tmp/public"; - const dir = prefix + this.config[key].path; - filename = prefix + filename; - sails.log.verbose("IMAGE ADAPTER LOCAL save file: ", filename); - return new Promise((resolve, reject) => { - request.head(url, (err) => { - if (err) - return reject(err); - fs.exists(this.config[key].path, async (exists) => { - if (!exists) { - fs.mkdirSync(dir, { recursive: true }); - } - request(url) - .on("response", function (response) { - sails.log.verbose("LocalMediaFileAdapter > download > statusCode >", url, response.statusCode); - }) - .on("error", function (err) { - sails.log.error("LocalMediaFileAdapter > download > error >", url, err); - return reject(err); - }) - .pipe(fs.createWriteStream(filename)) - .on("finish", function () { - sails.log.verbose("LocalMediaFileAdapter > download > success >", url); - return resolve(prefix); - }); - }); - }); - }); - } - async loadMediaFiles() { - try { - while (loadMediaFilesProcessQueue.length) { - const mediafile = loadMediaFilesProcessQueue.shift(); - const conf = this.config[mediafile.key]; - // Load mediafiles - sails.log.verbose("MediaFileAdapter > loadMediaFiles > load", mediafile.name.origin); - const prefix = await this.download(mediafile.url, mediafile.key, mediafile.name.origin); - // resize MediaFiles - sails.log.verbose("MediaFileAdapter > loadMediaFiles > resize", mediafile.name.origin); - for (let size in conf.resize) { - if (size === "origin") - continue; - const mediafileItem = conf.resize[size]; - if (!mediafileItem.width && !mediafileItem.height) { - // noinspection ExceptionCaughtLocallyJS - throw "Not valid mediafile config. Must have name (key) and one of width or height"; - } - mediafileItem.width = mediafileItem.width || mediafileItem.height; - mediafileItem.height = mediafileItem.height || mediafileItem.width; - //TODO: except for PNF transparent resize - // https://mediafilemagick.org/script/color.php color list - await resizeMediaFile({ - srcPath: path.normalize(prefix + mediafile.name.origin), - dstPath: path.normalize(prefix + mediafile.name[size]), - width: mediafileItem.width, - height: mediafileItem.height, - customArgs: ["-background", conf.background || "white", "-flatten"], - }); - } - sails.log.verbose("MediaFileAdapter > loadMediaFiles > end >", mediafile.url); - } - } - catch (e) { - sails.log.error("MediaFileAdapter > loadMediaFiles > error2", e); - } - finally { - setTimeout(this.loadMediaFiles.bind(this), 10000); - } - } -} -exports.default = LocalMediaFileAdapter; -function resizeMediaFile(opts) { - return new Promise((resolve, reject) => { - IM.resize(opts, function (err, stdout, stderr) { - if (err) { - sails.log.error(stderr); - reject(err); - } - resolve(stdout); - }); - }); -} diff --git a/adapters/mediafile/default/im-local.ts b/adapters/mediafile/default/im-local.ts deleted file mode 100644 index 1d92c9dd..00000000 --- a/adapters/mediafile/default/im-local.ts +++ /dev/null @@ -1,161 +0,0 @@ -import MediaFileAdapter from "../MediaFileAdapter"; -import MediaFile from "../MediaFile"; -import MediaFileConfig from "../MediaFileConfig"; - -import * as fs from "fs"; -import* as request from "request"; -import { v5 as uuidv5 } from "uuid"; -const UUID_NAMESPACE = process.env.UUID_NAMESPACE || "1b671a64-40d5-491e-99b0-da01ff1f3341"; -const IM = require("imagemagick"); -import * as path from "path"; -let loadMediaFilesProcess = null; -let loadMediaFilesProcessQueue = []; - - -// images: { -// adapter: 'imagemagick-local', -// dish: { -// format: process.env.IMAGES_DISH_FILE_FORMAT === undefined ? 'png' : process.env.IMAGES_DISH_FILE_FORMAT, -// path: '/images', -// resize: { -// small: { -// width: process.env.IMAGES_SMALL_SIZE_PX === undefined ? 600 : parseInt(process.env.IMAGES_SMALL_SIZE_PX), -// height: process.env.IMAGES_SMALL_SIZE_PX === undefined ? 600 : parseInt(process.env.IMAGES_SMALL_SIZE_PX) -// }, -// large: { -// width: process.env.IMAGES_LARGE_SIZE_PX === undefined ? 900 : parseInt(process.env.IMAGES_LARGE_SIZE_PX), -// } -// } -// }, -// group: { -// format: process.env.IMAGES_GROUP_FILE_FORMAT === undefined ? 'png' : process.env.IMAGES_GROUP_FILE_FORMAT, -// path: '/imagesG', -// } -// }, - - - -export default class LocalMediaFileAdapter extends MediaFileAdapter { - constructor(config: MediaFileConfig) { - super(config); - if (!loadMediaFilesProcess) { - loadMediaFilesProcess = this.loadMediaFiles(); - } - } - - public async load(url: string, key: string): Promise<{ origin: string }> { - sails.log.verbose("MediaFileAdapter > load >", url); - const conf = this.config[key]; - var mediafileExtesion = url.match(/\.([0-9a-z]+)(?=[?#])|(\.)(?:[\w]+)$/gim)[0]; - const filename = conf.path + "/" + uuidv5(url, UUID_NAMESPACE) + mediafileExtesion; - const name = { - origin: filename, - }; - - for (let res in this.config[key].resize) { - name[res] = conf.path + "/" + uuidv5(url, UUID_NAMESPACE) + "." + conf.format; - } - - const mediafile = new MediaFile(url, name, key); - loadMediaFilesProcessQueue.push(mediafile); - return mediafile.name; - } - - public uploadMediaFile(uploadFile: any, key: string): Promise { - throw new Error("Method not implemented."); - } - - protected download(url: string, key: string, filename: string): Promise { - const prefix = process.cwd() + "/.tmp/public"; - const dir = prefix + this.config[key].path; - filename = prefix + filename; - sails.log.verbose("IMAGE ADAPTER LOCAL save file: ", filename); - return new Promise((resolve, reject) => { - request.head(url, (err) => { - if (err) return reject(err); - - fs.exists(this.config[key].path, async (exists) => { - if (!exists) { - fs.mkdirSync(dir, { recursive: true }); - } - - request(url) - .on("response", function (response) { - sails.log.verbose("LocalMediaFileAdapter > download > statusCode >", url, response.statusCode); - }) - .on("error", function (err) { - sails.log.error("LocalMediaFileAdapter > download > error >", url, err); - return reject(err); - }) - .pipe(fs.createWriteStream(filename)) - .on("finish", function () { - sails.log.verbose("LocalMediaFileAdapter > download > success >", url); - return resolve(prefix); - }); - }); - }); - }); - } - - private async loadMediaFiles() { - try { - while (loadMediaFilesProcessQueue.length) { - const mediafile = loadMediaFilesProcessQueue.shift(); - const conf = this.config[mediafile.key]; - - // Load mediafiles - sails.log.verbose("MediaFileAdapter > loadMediaFiles > load", mediafile.name.origin); - const prefix = await this.download(mediafile.url, mediafile.key, mediafile.name.origin); - - // resize MediaFiles - sails.log.verbose("MediaFileAdapter > loadMediaFiles > resize", mediafile.name.origin); - - for (let size in conf.resize) { - if (size === "origin") continue; - - const mediafileItem = conf.resize[size]; - if (!mediafileItem.width && !mediafileItem.height) { - // noinspection ExceptionCaughtLocallyJS - throw "Not valid mediafile config. Must have name (key) and one of width or height"; - } - - mediafileItem.width = mediafileItem.width || mediafileItem.height; - mediafileItem.height = mediafileItem.height || mediafileItem.width; - - //TODO: except for PNF transparent resize - // https://mediafilemagick.org/script/color.php color list - - await resizeMediaFile({ - srcPath: path.normalize(prefix + mediafile.name.origin), - dstPath: path.normalize(prefix + mediafile.name[size]), - width: mediafileItem.width, - height: mediafileItem.height, - customArgs: ["-background", conf.background || "white", "-flatten"], - }); - } - sails.log.verbose("MediaFileAdapter > loadMediaFiles > end >", mediafile.url); - } - } catch (e) { - sails.log.error("MediaFileAdapter > loadMediaFiles > error2", e); - } finally { - setTimeout(this.loadMediaFiles.bind(this), 10000); - } - } -} - -interface Size { - width?: number; - height?: number; -} - -function resizeMediaFile(opts: any) { - return new Promise((resolve, reject) => { - IM.resize(opts, function(err, stdout, stderr){ - if (err) { - sails.log.error(stderr); - reject(err); - } - resolve(stdout); - }); - }); -} diff --git a/adapters/promotion/AbstractPromotionAdapter.d.ts b/adapters/promotion/AbstractPromotionAdapter.d.ts index c187c9e6..d0211bdd 100644 --- a/adapters/promotion/AbstractPromotionAdapter.d.ts +++ b/adapters/promotion/AbstractPromotionAdapter.d.ts @@ -2,7 +2,7 @@ import Order from "../../models/Order"; import AbstractPromotionHandler from "./AbstractPromotion"; import Group from './../../models/Group'; import Dish from './../../models/Dish'; -import Promotion from './../../models/Promotion.d'; +import Promotion from './../../models/Promotion'; import { IconfigDiscount } from './../../interfaces/ConfigDiscount'; import { PromotionAdapter } from "./default/promotionAdapter"; export default abstract class AbstractPromotionHandlerINSTANCE { diff --git a/adapters/promotion/AbstractPromotionAdapter.ts b/adapters/promotion/AbstractPromotionAdapter.ts index cd3b7353..06145f56 100644 --- a/adapters/promotion/AbstractPromotionAdapter.ts +++ b/adapters/promotion/AbstractPromotionAdapter.ts @@ -7,7 +7,7 @@ import AbstractPromotionHandler from "./AbstractPromotion"; // import Promotion from '@webresto/core/models/Promotion'; import Group from './../../models/Group'; import Dish from './../../models/Dish'; -import Promotion from './../../models/Promotion.d'; +import Promotion from './../../models/Promotion'; import { IconfigDiscount } from './../../interfaces/ConfigDiscount'; import { PromotionAdapter } from "./default/promotionAdapter"; diff --git a/index.js b/index.js index 30abf9bc..7b25631c 100644 --- a/index.js +++ b/index.js @@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); +/// __exportStar(require("./models/BonusProgram"), exports); __exportStar(require("./models/Dish"), exports); __exportStar(require("./models/Group"), exports); diff --git a/index.ts b/index.ts index 5075aa46..38d76ea5 100644 --- a/index.ts +++ b/index.ts @@ -1,4 +1,5 @@ 'use strict'; +/// export * from './models/BonusProgram'; export * from './models/Dish'; diff --git a/models/Dish.ts b/models/Dish.ts index 4cb45da3..59fb44d0 100644 --- a/models/Dish.ts +++ b/models/Dish.ts @@ -11,7 +11,6 @@ import { WorkTime } from "@webresto/worktime"; import { v4 as uuid } from "uuid"; import { RequiredField, OptionalAll } from "../interfaces/toolsTS"; import { GroupModifier, Modifier } from "../interfaces/Modifier"; -import { PromotionAdapter } from "../adapters/discount/default/promotionAdapter"; import { Adapter } from "../adapters"; let attributes = { diff --git a/models/Group.ts b/models/Group.ts index 6cf77d64..5d75a1dd 100644 --- a/models/Group.ts +++ b/models/Group.ts @@ -9,7 +9,6 @@ import { WorkTime } from "@webresto/worktime"; import slugify from "slugify" import { v4 as uuid } from "uuid"; import { OptionalAll } from "../interfaces/toolsTS"; -import { DiscountAdapter } from "../adapters/discount/default/discountAdapter"; import { Adapter } from "../adapters"; let attributes = { diff --git a/models/Order.d.ts b/models/Order.d.ts index 73fb2cdc..8d4c5b14 100644 --- a/models/Order.d.ts +++ b/models/Order.d.ts @@ -23,7 +23,7 @@ declare let attributes: { /** * @deprecated will be rename to `Items` in **v2** */ - dishes: number[] | OrderDish[]; + dishes: OrderDish[] | number[]; paymentMethod: any; /** */ paymentMethodTitle: string; @@ -53,12 +53,12 @@ declare let attributes: { rmsStatusCode: string; deliveryStatus: string; selfService: boolean; - deliveryDescription: string; - message: string; /** Notification about delivery * ex: time increased due to traffic jams + * @deprecated should changed for deliveryMessage * */ - deliveryMessage: string; + deliveryDescription: string; + message: string; deliveryItem: string | Dish; deliveryCost: number; /** order total weight */ @@ -138,7 +138,7 @@ declare let Model: { shortId?: string; concept?: string; isMixedConcept?: boolean; - dishes?: number[] | OrderDish[]; + dishes?: OrderDish[] | number[]; paymentMethod?: any; paymentMethodTitle?: string; paid?: boolean; @@ -164,7 +164,6 @@ declare let Model: { selfService?: boolean; deliveryDescription?: string; message?: string; - deliveryMessage?: string; deliveryItem?: string | Dish; deliveryCost?: number; totalWeight?: number; diff --git a/models/Order.js b/models/Order.js index b71b300e..ae779419 100644 --- a/models/Order.js +++ b/models/Order.js @@ -74,15 +74,15 @@ let attributes = { type: "boolean", defaultsTo: false, }, + /** Notification about delivery + * ex: time increased due to traffic jams + * @deprecated should changed for deliveryMessage + * */ deliveryDescription: { type: "string", - defaultsTo: "", + allowNull: true }, message: "string", - /** Notification about delivery - * ex: time increased due to traffic jams - * */ - deliveryMessage: 'string', deliveryItem: { model: "Dish", }, @@ -506,7 +506,34 @@ let Model = { } } } - emitter.emit("core-order-check-delivery", order, customer, isSelfService, address); + let deliveryAdapter = await Adapter.getDeliveryAdapter(); + deliveryAdapter.reset(order); + // Check and calculate delivery + emitter.emit("core-order-check-delivery", order); + try { + /** + * Calling the calculation check and delivery suggests that it will come empty. + * If something was changed in the order in the delivery fields, the adapter should not be launched. + */ + if (!order.deliveryCost && !order.deliveryItem) { + let delivery = await deliveryAdapter.calculate(order); + if (!delivery.item) { + order.deliveryCost = delivery.cost; + } + else { + order.deliveryItem = delivery.item; + order.deliveryCost = (await Dish.findOne({ id: delivery.item })).price; + } + order.deliveryDescription = delivery.message; + } + else { + sails.log.debug(`Core > order > skip delivery calculate: ${order.deliveryCost}: ${order.deliveryItem}`); + } + } + catch (error) { + sails.log.error(`Core > order > delivery calculate fail: `, error); + } + emitter.emit("core-order-after-check-delivery", order); /** * Bonus spending * */ @@ -516,6 +543,7 @@ let Model = { // Fetch the bonus program for this bonus spend const bonusProgram = await BonusProgram.findOne({ id: spendBonus.bonusProgramId }); spendBonus.amount = parseFloat(new decimal_js_1.default(spendBonus.amount).toFixed(bonusProgram.decimals)); + // TODO: rewrite for Decimal.js let amountToDeduct = 0; switch (bonusSpendingStrategy) { case 'bonus_from_order_total': diff --git a/models/Order.ts b/models/Order.ts index 07c4a5eb..d2c4f202 100644 --- a/models/Order.ts +++ b/models/Order.ts @@ -106,18 +106,17 @@ let attributes = { defaultsTo: false, } as unknown as boolean, + /** Notification about delivery + * ex: time increased due to traffic jams + * @deprecated should changed for deliveryMessage + * */ deliveryDescription: { type: "string", - defaultsTo: "", + allowNull: true } as unknown as string, message: "string", // deprecated - /** Notification about delivery - * ex: time increased due to traffic jams - * */ - deliveryMessage: 'string', - deliveryItem: { model: "Dish", } as unknown as Dish | string, @@ -643,8 +642,33 @@ let Model = { } } - emitter.emit("core-order-check-delivery", order, customer, isSelfService, address); - + + let deliveryAdapter = await Adapter.getDeliveryAdapter(); + deliveryAdapter.reset(order); + // Check and calculate delivery + emitter.emit("core-order-check-delivery", order); + try { + /** + * Calling the calculation check and delivery suggests that it will come empty. + * If something was changed in the order in the delivery fields, the adapter should not be launched. + */ + if(!order.deliveryCost && !order.deliveryItem) { + let delivery = await deliveryAdapter.calculate(order); + if(!delivery.item) { + order.deliveryCost = delivery.cost + } else { + order.deliveryItem = delivery.item + order.deliveryCost = (await Dish.findOne({id: delivery.item})).price + } + order.deliveryDescription = delivery.message + } else { + sails.log.debug(`Core > order > skip delivery calculate: ${order.deliveryCost}: ${order.deliveryItem}`) + } + } catch (error) { + sails.log.error(`Core > order > delivery calculate fail: `, error) + } + emitter.emit("core-order-after-check-delivery", order); + /** * Bonus spending * */ @@ -656,6 +680,8 @@ let Model = { const bonusProgram = await BonusProgram.findOne({id: spendBonus.bonusProgramId}); spendBonus.amount = parseFloat(new Decimal(spendBonus.amount).toFixed(bonusProgram.decimals)) + + // TODO: rewrite for Decimal.js let amountToDeduct = 0; switch (bonusSpendingStrategy) { case 'bonus_from_order_total': diff --git a/test/mocks/adapter/RMS.js b/test/mocks/adapter/RMS.js index 060500da..5cacf4dd 100644 --- a/test/mocks/adapter/RMS.js +++ b/test/mocks/adapter/RMS.js @@ -45,7 +45,8 @@ class TestRMS extends RMSAdapter_1.default { for (let i = 0; i < 7; i++) { dishes.push((0, dish_generator_1.default)({ parentGroup: group.id, - price: 100.1 + price: 100.1, + name: undefined })); } return dishes; diff --git a/test/mocks/adapter/RMS.ts b/test/mocks/adapter/RMS.ts index ebe820eb..d68813bd 100644 --- a/test/mocks/adapter/RMS.ts +++ b/test/mocks/adapter/RMS.ts @@ -50,8 +50,9 @@ export class TestRMS extends RMSAdapter { let dishes = []; for(let i = 0; i < 7; i++) { dishes.push(dishGenerator({ - parentGroup: group.id, - price: 100.1 + parentGroup: group.id, + price: 100.1, + name: undefined })); } return dishes; diff --git a/test/mocks/adapter/discount.ts b/test/mocks/adapter/discount.ts index 251f56d8..394a769a 100644 --- a/test/mocks/adapter/discount.ts +++ b/test/mocks/adapter/discount.ts @@ -1,5 +1,5 @@ import { WorkTime } from "@webresto/worktime"; -import Order from './../../../models/Order.d'; +import Order from './../../../models/Order'; import AbstractPromotionHandler from "../../../adapters/promotion/AbstractPromotion"; import { IconfigDiscount } from './../../../interfaces/ConfigDiscount'; import Group from './../../../models/Group';