/home/bdqbpbxa/dev-subdomains/admin.pixory.goodface.com.ua/config/cron-tasks.ts
import { Core } from "@strapi/strapi";
import { OrderStatus } from "../src/api/order/common/enums/order-status";
import { Service as PeechoService } from "../src/api/order/common/peecho/services/peecho";
import { ItemDetails } from "../src/api/order/common/peecho/types/item-details";
import { Order } from "../src/api/order/common/types/order";
import { Address as PeechoAddress } from "../src/api/order/common/peecho/types/address";
const cron30Mins = '*/30 * * * *';
const orderCreationDelayInMinutes = 30;
export default {
orderCreation: {
task: async ({ strapi } : { strapi: Core.Strapi }) => {
strapi.log.info('Running order creation task');
const orders: Order[] = await strapi.db.query('api::order.order').findMany({
where: { orderStatus: OrderStatus.SCHEDULED },
});
const now = new Date();
for (let order of orders) {
const createdAt = new Date(order.createdAt);
const diffInMinutes = (now.getTime() - createdAt.getTime()) / (1000 * 60);
if (diffInMinutes >= orderCreationDelayInMinutes) {
order = await strapi.db.query('api::order.order').update({
where: { id: order.id },
data: { orderStatus: OrderStatus.OPEN },
populate: {
orderedProjects: {
populate: {
project: {
populate: {
product: true,
}
}
},
},
shippingAddress: true,
billingAddress: true,
creator: true,
}
});
const shippingAddress = {
...order.shippingAddress,
state: order.shippingAddress.state?.code,
countryCode: order.shippingAddress.country?.code,
} as PeechoAddress;
const billingAddress = {
...order.billingAddress,
state: order.billingAddress.state?.code,
countryCode: order.billingAddress.country?.code,
} as PeechoAddress
const peechoService = new PeechoService(strapi);
const peechoOrderId = await peechoService.createOrder({
currency: order.currency.toUpperCase(),
itemDetails: order.orderedProjects.map((orderedProject) => ({
title: orderedProject.project.title,
offering_id: orderedProject.project.product.id,
quantity: orderedProject.quantity,
file_details: {
/**
* @TODO Get file details from Printbox
**/ }
})) as ItemDetails[],
addressDetails: {
emailAddress: order.creator.email,
shippingAddress: shippingAddress,
billingAddress: billingAddress,
},
orderRefference: order.id.toString(),
});
await strapi.db.query('api::order.order').update({
where: { id: order.id },
data: { peechoOrderId },
});
strapi.log.info(`Order ID ${order.id} status updated to OPEN`);
}
}
},
options: {
rule: cron30Mins,
}
}
}