😱

条件に応じてjsonの返却を変えてみた(enum編)

2023/09/04に公開

前提

LINE message APIを使用して自動応答を実装していた際のロジックメモです
ユーザーからのメッセージは同じでstatusによって返信を変えたいという要件

コード

①const answer = ANSWER_TEMPLATES.find(
    ({ replyKey, condition }) =>
      replyKey === message && (condition ? condition(item[0]) : true),
  );
  
②switch (operation) {
    case Operation.DELETE:
      return '何かの処理';
    default:
      return;
  }

 ③
 export enum Operation {
  DELETE_COUNSEL,
}

interface AnswerTemplate {
  replyKey: string;
  condition?: (counsel?: Counsel) => boolean;
  operation?: Operation;
  message: Message;
}
 const ANSWER_TEMPLATES: AnswerTemplate[] = [
  {
    replyKey: 'テキスト',
    condition: (item) => !item,
    message: {
      type: 'text',
      text:'text',
    },
  },
  {
    replyKey: 'テキスト',
    condition: (item) => !!item && item.state === 'end',
    message: {
      type: 'text',
      text:'text',
    },
  },
]

①検索+条件の引数を渡す
②その値によってAPI関連などの処理をする
③jsonを返す定数の集まりみたいなやつ

①でswitch文みたいに検索をし、itemを渡しその中のstatusがtrueになるものが返却されるため
一貫して書けるし、責務の分離がすごいしやすいんだと思った一日でありました

ちなみにmessage: Message;これの型はLINE message APIのやつです

Discussion