Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.04.2021, 02:43
Новичок на форуме
Отправить личное сообщение для typicsort Посмотреть профиль Найти все сообщения от typicsort
 
Регистрация: 20.04.2021
Сообщений: 5

Слить две кроны в одну новую
Всем привет ,как правильно сделать небольшой рефакторинг этих двух триггеров в один новый?

Напрмер,есть два триггера :
1.checkUnsentOrders :
module.exports = functions.pubsub
  .schedule("0 0 12 * *")
  .timeZone("")
  .onRun(async () => {
    const startDate = startOfDate();
    const endDate = endOfDate();
    const dateBefore = dateBeforeGameDay();
    const finishedGameStatusDayBefore = [
      ...finishedGameOrdersStatusIds
    ];
    let listGameOrders = await getGameOrdersForEmailing(startDate, endDate);
    let finishGameOrdersStatus = listGameOrders.filter((order) => {
      const gameDate = DateTime.fromJSDate(order.pickupDate)
        .toJSDate();
      if (dateBefore.getDay() === gameDate.getDay()) {
        return !finishedGameStatusDayBefore.includes(order.GameStatus);
      }
      return !finishedGameOrdersStatusIds.includes(order.GameStatus);
    });
    let rows = finishGameOrdersStatus
      .map(
        (id) =>
          `</td><td>${game.id}</td></tr>`
      )
    let view = ``;
    let statusGameOrdersView = `
<style></style>
  `;
    await sentGameHtmlEmail(statusGameOrdersView);
  });

и второй gameMailUnsentOrders:

const processGamerReminderEmail = 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} reminder email is not detected`
    );
    return;
  }
  let rows = gamerOrders
    .map(
      (doc: OrderData) =>
        `...`
    )
  let view = `<table></table>
                `;
  return await sentGameHtmlEmail(
    gamerReminderEmail
  );
};
module.exports = functions.pubsub
  .schedule("0 0 12 * *")
  .timeZone("")
  .onRun(async () => {
    const startDate = startOfDate();
    const endDate = endOfDate();
    const dateBefore = dateBeforeGameDay();
    const finalizedStatusDayBefore = [
      ...finalisedOrdersStatusIds
    ];
    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);
      })
    );
  });


Тоесть, обьеденить существующие кроны в этих триггерах(checkUnsentOrders и gameMailUnsentOrders) в один новый(new) .Хотел бы объединить, потому что эти два триггера вызываются в одно и тоже время. Как это правильно сделать? Может есть идеи как написать красивый метод?

Последний раз редактировалось typicsort, 20.04.2021 в 12:44.
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2021, 11:11
Новичок на форуме
Отправить личное сообщение для typicsort Посмотреть профиль Найти все сообщения от typicsort
 
Регистрация: 20.04.2021
Сообщений: 5

Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2021, 22:53
Новичок на форуме
Отправить личное сообщение для typicsort Посмотреть профиль Найти все сообщения от typicsort
 
Регистрация: 20.04.2021
Сообщений: 5

Немного разобрался, кто подскажет, правильный ли ход мыслей? :

Меняем checkUnsentOrders.js :

module.exports =async () => { 
    const startDate = startOfDate();
    const endDate = endOfDate();
    const dateBefore = dateBeforeGameDay();
    const finishedGameStatusDayBefore = [
      ...finishedGameOrdersStatusIds
    ];
    let listGameOrders = await getGameOrdersForEmailing(startDate, endDate);
    let finishGameOrdersStatus = listGameOrders.filter((order) => {
      const gameDate = DateTime.fromJSDate(order.pickupDate)
        .toJSDate();
      if (dateBefore.getDay() === gameDate.getDay()) {
        return !finishedGameStatusDayBefore.includes(order.GameStatus);
      }
      return !finishedGameOrdersStatusIds.includes(order.GameStatus);
    });
    let rows = finishGameOrdersStatus
      .map(
        (id) =>
          `</td><td>${game.id}</td></tr>`
      )
    let view = ``;
    let statusGameOrdersView = `
<style></style>
  `;
    await sentGameHtmlEmail(statusGameOrdersView);
  };


и gameMailUnsentOrders.js
const processGamerReminderEmail = 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} reminder email is not detected`
    );
    return;
  }
  let rows = gamerOrders
    .map(
      (doc: OrderData) =>
        `...`
    )
  let view = `<table></table>
                `;
  return await sentGameHtmlEmail(
    gamerReminderEmail
  );
};
module.exports = async () => {
    const startDate = startOfDate();
    const endDate = endOfDate();
    const dateBefore = dateBeforeGameDay();
    const finalizedStatusDayBefore = [
      ...finalisedOrdersStatusIds
    ];
    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);
      })
    );
  };


и потом в новосозданой кроне , например dailyEmails.js:
module.exports = functions.pubsub
  .schedule("0 0 12 * *")
  .timeZone("")
  .onRun(async () => {
    await checkUnsentOrders();
    await gameMailUnsentOrders();
 
 
    ]);
  });
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция для перевода размера из байтов в понятный для человека формат Антон Крамолов Ваши сайты и скрипты 4 05.04.2013 15:42
помощь новичку - задача вывода содержимого нескольких страниц в одну новую samurau AJAX и COMET 2 03.11.2009 18:07