😱
条件に応じてjsonの返却を変えてみた(enum編)
前提
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