通过 cron、pubsub 发送电子邮件

时间:2021-04-21 21:43:25

标签: javascript typescript cron

在将订单中的状态更改为“DELIVERED”后,我在创建一个新的触发器以在第二天只发送一封电子邮件时遇到了困难,也就是说,在 sendStatusEmails 触发器中创建一个查询以按状态和 ID 检索订单。谁能帮忙解决这个问题或举个例子?

这里是 cron dailyEmails.js

module.exports = functions.pubsub
.schedule("0 0 12 * *")
.timeZone("")
.onRun(async () => {
 await checkUnsentOrders();
 await gameMailUnsentOrders();
 await sendStatusEmails();

 ]);
});

触发 gameMailUnsentOrders.js 的例子

const processGamerStatusReminderEmail = async (gamerOrders: OrderData[]) => {
  const firstOrder = _.head(gamerOrders);
  const gamerName = firstOrder
    ? firstOrder.gamerName
      ? firstOrder.gamerName
      : ""
    : "";
  const gamerId = firstOrder
    ? firstGameOrder.gamerId
      ? firstGameOrder.gamerId
      : ""
    : "";
  const gamerData = await (await gamer.doc(gamerId).get()).data();
  const gamerReminderEmail = gamerData.reminderEmail;
  if (gamerReminderEmail === "" || !gamerReminderEmail) {
    console.log(
      ` ${gamerName} email is not finded`
    );
    return;
  }
  let rows = gamerOrders
    .map(
      (doc: OrderData) =>
        `...`
    )
  let view = `<strong>Status: </strong> ${status}(
                `;
  return await sentGameHtmlEmail(
    gamerReminderEmail
  );
};
module.exports = async () => {
    const startDate = startOfDate();
    const endDate = endOfDate();
    const dateBefore = dateBeforeGameDay();
    const finalizedStatusDayBefore = [
      ...finalisedOrdersStatusIds,
             constants.DELIVERED.id,
 
    ];
    let listGameOrders = await getGameOrdersMailing(startDate, endDate);
    let ordersStatus = listGameOrders.filter((gameOrder) => {
      const gameDate = DateTime.fromJSDate(gameOrder.gamePDate)
      .toJSDate();
      if (dateBefore.getDay() === gameDate.getDay()) {
        return !finalizedStatusDayBefore.includes(gameOrder.gameStatus.id);
      }
      return !finalisedOrdersStatusIds.includes(gameOrder.gameStatus.id);
    });
    let orderedByGamerId = _.orderBy(
      ordersStatus.map((order) => order),
      "gamerId"
    );
    return await Promise.all(
      _.map(orderedByGamerId, (gameOrders: OrderData[]) => {
        return processGamerReminderEmail(gameOrders);
      })
    );
  };

0 个答案:

没有答案