Skip to content

Commit

Permalink
add order clear
Browse files Browse the repository at this point in the history
  • Loading branch information
Xziy committed Jul 11, 2024
1 parent a984722 commit 638368b
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 24 deletions.
2 changes: 1 addition & 1 deletion adapters/promotion/AbstractPromotionAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class AbstractPromotionAdapter {
async clearOfPromotion(order) {
// if Order.status ="PAYMENT" or "ORDER" can't clear promotions
if (order.state === "ORDER")
throw "order with orderId " + order.id + "in state ORDER";
throw `order with orderId ${order.id} in state ORDER`;
//if (order.state === "PAYMENT") throw "order with orderId" + order.id + "in state PAYMENT";
// const orderDishes = await OrderDish.find({ order: order.id }).populate("dish");
await OrderDish.destroy({ order: order.id, addedBy: "promotion" }).fetch();
Expand Down
5 changes: 3 additions & 2 deletions libs/DialogBox.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ class DialogBox {
// Check JsonSchema
if (!validate(dialog)) {
sails.log.error(`${dialog} not match with config schema`);
sails.log.error(JSON.stringify(validate.errors, null, 2));
throw `DialogBox config not valid`;
let errors = JSON.stringify(validate.errors, null, 2);
sails.log.error(errors);
throw `DialogBox config not valid: ${errors}`;
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
Expand Down
5 changes: 3 additions & 2 deletions libs/DialogBox.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,9 @@ export class DialogBox {
// Check JsonSchema
if(!validate(dialog)) {
sails.log.error(`${dialog} not match with config schema`)
sails.log.error(JSON.stringify(validate.errors, null, 2))
throw `DialogBox config not valid`
let errors = JSON.stringify(validate.errors, null, 2)
sails.log.error(errors)
throw `DialogBox config not valid: ${errors}`
}

function sleep(ms: number): Promise<void> {
Expand Down
1 change: 1 addition & 0 deletions models/Order.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ declare let Model: {
/** Basket design*/
order(criteria: CriteriaQuery<Order>): Promise<void>;
payment(criteria: CriteriaQuery<Order>): Promise<PaymentResponse>;
clear(criteria: CriteriaQuery<Order>): Promise<void>;
paymentMethodId(criteria: CriteriaQuery<Order>): Promise<string>;
/** given populated Order instance by criteria*/
populate(criteria: CriteriaQuery<Order>): Promise<{
Expand Down
41 changes: 23 additions & 18 deletions models/Order.js
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ let Model = {
if (order.dishes.length > 99)
throw "99 max dishes amount";
if (order.state === "ORDER")
throw "order with orderId " + order.id + "in state ORDER";
throw `order with orderId ${order.id} in state ORDER`;
if (modifiers && modifiers.length) {
modifiers.forEach((m) => {
if (m.amount === undefined)
Expand Down Expand Up @@ -425,7 +425,7 @@ let Model = {
await emitter.emit.apply(emitter, ["core:order-before-remove-dish", ...arguments]);
const order = await Order.findOne(criteria).populate("dishes");
if (order.state === "ORDER")
throw "order with orderId " + order.id + "in state ORDER";
throw `order with orderId ${order.id} in state ORDER`;
var orderDish;
if (stack) {
amount = 1;
Expand Down Expand Up @@ -471,7 +471,7 @@ let Model = {
}
const order = await Order.findOne(criteria).populate("dishes");
if (order.state === "ORDER")
throw "order with orderId " + order.id + "in state ORDER";
throw `order with orderId ${order.id} in state ORDER`;
const orderDishes = await OrderDish.find({ order: order.id }).populate("dish");
const get = orderDishes.find((item) => item.id === dish.id);
if (get) {
Expand All @@ -497,7 +497,7 @@ let Model = {
await emitter.emit.apply(emitter, ["core:order-before-set-comment", ...arguments]);
const order = await Order.findOne(criteria).populate("dishes");
if (order.state === "ORDER")
throw "order with orderId " + order.id + "in state ORDER";
throw `order with orderId ${order.id} in state ORDER`;
const orderDish = await OrderDish.findOne({
order: order.id,
id: dish.id,
Expand Down Expand Up @@ -547,7 +547,7 @@ let Model = {
sails.log.silly("Order > setSelfService >", selfService);
const order = await Order.findOne(criteria);
if (order.state === "ORDER")
throw "order with orderId " + order.id + "in state ORDER";
throw `order with orderId ${order.id} in state ORDER`;
return (await Order.update(criteria, { selfService: Boolean(selfService) }).fetch())[0];
},
/**
Expand Down Expand Up @@ -631,7 +631,7 @@ let Model = {
if (await Maintenance.getActiveMaintenance() !== undefined)
throw `Currently site is off`;
if (order.state === "ORDER")
throw `order with orderId ${order.id}in state ORDER`;
throw `order with orderId ${order.id} in state ORDER`;
if (order.promotionUnorderable === true)
throw `Order not possible for order by promotion`;
//const order: Order = await Order.findOne(criteria);
Expand Down Expand Up @@ -831,9 +831,9 @@ let Model = {
throw `Currently site is off`;
// TODO: impl with stateflow
if (order.state === "ORDER")
throw "order with orderId " + order.id + "in state ORDER";
throw `order with orderId ${order.id} in state ORDER`;
if (order.state === "CART")
throw "order with orderId " + order.id + "in state CART";
throw `order with orderId ${order.id} in state CART`;
// await Order.update({id: order.id}).fetch();
// TODO: this check is needed
// if(( order.isPaymentPromise && order.paid) || ( !order.isPaymentPromise && !order.paid) )
Expand Down Expand Up @@ -927,7 +927,7 @@ let Model = {
async payment(criteria) {
const order = await Order.findOne(criteria);
if (order.state !== "CHECKOUT")
throw "order with orderId " + order.id + "in state ${order.state} but need CHECKOUT";
throw `order with orderId ${order.id} in state ${order.state} but need CHECKOUT`;
var paymentResponse;
let comment = "";
var backLinkSuccess = (await Settings.get("FRONTEND_ORDER_PAGE")) + order.shortId;
Expand All @@ -951,26 +951,31 @@ let Model = {
await Order.next(order.id, "PAYMENT");
return paymentResponse;
},
async clear(criteria) {
let order = await Order.findOne(criteria);
if (order.state !== "CART")
throw `Clear allowed only for CART state`;
await OrderDish.destroy({ order: order.id }).fetch();
await Order.next(order.id, "CART");
await Order.countCart({ id: order.id });
await emitter.emit.apply(emitter, ["core:order-was-cleared", ...arguments]);
},
async paymentMethodId(criteria) {
let populatedOrder = (await Order.find(criteria).populate("paymentMethod"))[0];
let paymentMethod = populatedOrder.paymentMethod;
return paymentMethod.id;
},
/** given populated Order instance by criteria*/
async populate(criteria) {
let order = await Order.findOne(criteria)
.populate('paymentMethod')
.populate('deliveryItem')
.populate('user');
if (!order)
throw `order by criteria: ${criteria}, not found`;
let fullOrder;
try {
fullOrder = await Order.findOne({ id: order.id })
fullOrder = await Order.findOne(criteria)
.populate("dishes")
.populate("deliveryItem")
.populate('paymentMethod');
const orderDishes = await OrderDish.find({ order: order.id }).populate("dish").sort("createdAt");
.populate('paymentMethod').populate('user').populate('pickupPoint');
if (!fullOrder)
throw `order by criteria: ${criteria}, not found`;
const orderDishes = await OrderDish.find({ order: fullOrder.id }).populate("dish").sort("createdAt");
for (let orderDish of orderDishes) {
if (!orderDish.dish) {
sails.log.error("orderDish", orderDish.id, "has not dish");
Expand Down
12 changes: 12 additions & 0 deletions models/Order.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1167,6 +1167,18 @@ let Model = {
return paymentResponse;
},

async clear(criteria: CriteriaQuery<Order>): Promise<void> {

let order = await Order.findOne(criteria);
if (order.state !== "CART") throw `Clear allowed only for CART state`;

await OrderDish.destroy({ order: order.id }).fetch();
await Order.next(order.id, "CART");
await Order.countCart({ id: order.id });
await emitter.emit.apply(emitter, ["core:order-was-cleared", ...arguments]);
},


async paymentMethodId(criteria: CriteriaQuery<Order>): Promise<string> {
let populatedOrder = (await Order.find(criteria).populate("paymentMethod"))[0];
let paymentMethod = populatedOrder.paymentMethod as PaymentMethod;
Expand Down
5 changes: 4 additions & 1 deletion models/PaymentDocument.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,10 @@ let Model = {
let paymentResponse = await paymentAdapter.createPayment(payment, backLinkSuccess, backLinkFail);
sails.log.silly("PaymentDocument > register [after paymentAdapter.createPayment]", paymentResponse);
if (!paymentResponse.id) {
throw `PaymentDocument > register [after paymentAdapter.createPayment] paymentResponse from external payment system is required`;
throw `PaymentDocument > register [after paymentAdapter.createPayment] paymentResponse.id from external payment system is required`;
}
if (!paymentResponse.redirectLink) {
throw `PaymentDocument > register [after paymentAdapter.createPayment] paymentResponse.redirectLink from external payment system is required`;
}
await PaymentDocument.update({ id: paymentResponse.id }, {
status: "REGISTERED",
Expand Down

0 comments on commit 638368b

Please sign in to comment.