年間の購入金額を顧客のメタフィールドに格納する

年間の購入金額を顧客にメタフィールドに格納するFlowを組みたいのですが方法がわからず。。
方法がわかる方、大変恐縮ですが、ご教示いただけますと幸いです。

【実現したいこと】

当年(20241.1-2024.12.31)の累計購入金額を顧客のメタフィールドに格納したい。

購入が増えたり、キャンセルが入るたびに更新して行きたい。

@shin_shin

Run Codeを使用されてはどうでしょうか?

Order Createdの際の例だけになりますが、下記のようになるはずです。

[フロー全体]

[Run Code]

Run Codeの入力は下記です。

{
  order {
    createdAt
    customer {
      orders {
        currentTotalPriceSet {
          shopMoney {
            amount
          }
        }
        createdAt
      }
    }
  }
}

Run Codeの出力は下記です。

type Output {
  purchaingTotalYeary: Int!
}

Run Codeのコードは下記です。

export default function main(input) {
  const currentDateTime = new Date(input.order.createdAt);
  const lastYearDateTime = new Date(new Date(input.order.createdAt).setFullYear(currentDateTime.getFullYear() - 1));
  const orders = input.order.customer.orders;
  let purchaingTotalYeary = 0;
  orders.forEach(order => {
    const orderCreatedAt = new Date(order.createdAt);
    if (orderCreatedAt >  lastYearDateTime) {
      purchaingTotalYeary = purchaingTotalYeary + order.currentTotalPriceSet.shopMoney.amount;
    }
  });
  return {
    purchaingTotalYeary: purchaingTotalYeary
  }
}

Flow全体の説明をしますと、

Order Createdでトリガーし、

Run Codeでは、トリガーとなった注文の日時から1年以内の注文の合計金額を求め、

最後に顧客メタフィールドを更新しています。

十分にテストはしていませんので、

金額が一致するかは十分に検証いただく必要があります。

ご参考まで。

(キュー田辺)