Skip to content

Commit

Permalink
Add Cancellation Reminder. fixes #273 @1h
Browse files Browse the repository at this point in the history
  • Loading branch information
みぞ@CrazyBeatCoder committed Jan 22, 2018
1 parent 9f5d313 commit 1c3b5c8
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ private void onLineMessage(MessageEvent event) {
}
case HAS_REMINDER_MESSAGE:
case REMINDER_ENQUEUED:
case REMINDER_CANCELLATION_CONFIRM:
{
// NOP
break;
Expand Down Expand Up @@ -110,7 +111,21 @@ private void onLinePostBack(PostBackEvent event) {
}
case REMINDER_ENQUEUED:
{
// NOP
if (UseCase.ACTION_DATA_REQUEST_REMINDER_CANCELLATION.equals(event.getPostBackData())) {
mUseCase.setCancellationConfirm(event.getSource().getSourceId(), true);
mUseCase.replyReminderCancellationConfirmMessage(event.getReplyToken());
}
break;
}
case REMINDER_CANCELLATION_CONFIRM:
{
if (UseCase.ACTION_DATA_CANCEL_REMINDER.equals(event.getPostBackData())) {
mUseCase.replyCanceledReminderMessage(event.getReplyToken());
mUseCase.initSource(event.getSource().getSourceId());
} else if (UseCase.ACTION_DATA_NOT_CANCEL_REMINDER.equals(event.getPostBackData())) {
mUseCase.setCancellationConfirm(event.getSource().getSourceId(), false);
mUseCase.replyNotCanceledReminderMessage(event.getReplyToken());
}
break;
}
default:
Expand Down
87 changes: 77 additions & 10 deletions src/main/java/com/mizo0203/lilywhite/domain/UseCase.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,25 @@
import com.linecorp.bot.model.message.TemplateMessage;
import com.linecorp.bot.model.message.TextMessage;
import com.linecorp.bot.model.message.template.ButtonsTemplate;
import com.linecorp.bot.model.message.template.ConfirmTemplate;
import com.linecorp.bot.model.message.template.Template;
import com.mizo0203.lilywhite.repo.Repository;
import com.mizo0203.lilywhite.repo.State;
import com.mizo0203.lilywhite.repo.line.messaging.data.webHook.event.RequestBody;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;

public class UseCase {
public static final String ACTION_DATA_REQUEST_REMINDER_DATE_SET =
"ACTION_DATA_REQUEST_REMINDER_DATE_SET";
public static final String ACTION_DATA_REQUEST_REMINDER_CANCELLATION =
"ACTION_DATA_REQUEST_REMINDER_CANCELLATION";
public static final String ACTION_DATA_CANCEL_REMINDER = "ACTION_DATA_CANCEL_REMINDER";
public static final String ACTION_DATA_NOT_CANCEL_REMINDER = "ACTION_DATA_NOT_CANCEL_REMINDER";
public static final String ACTION_DATA_REQUEST_RESET = "ACTION_DATA_REQUEST_RESET";
private final Repository mRepository;
private final Translator mTranslator;
Expand All @@ -39,17 +45,17 @@ public void initSource(String source_id) {

/** リマインダーメッセージを送信する */
public void pushReminderMessage(String source_id, String message) {
mRepository.pushMessage(source_id, new TextMessage(message), createTemplateMessageToReset());
mRepository.pushMessage(
source_id, new TextMessage(message), createTemplateMessageToReset("リマインダーをリセットしますよー"));
}

private Message createTemplateMessageToReset() {
private Message createTemplateMessageToReset(String text) {
return new TemplateMessage(
"テンプレートメッセージはiOS版およびAndroid版のLINE 6.7.0以降で対応しています。", createTemplateToReset());
"テンプレートメッセージはiOS版およびAndroid版のLINE 6.7.0以降で対応しています。", createTemplateToReset(text));
}

private Template createTemplateToReset() {
return new ButtonsTemplate(
null, null, "リマインダーをリセットしますよー", createPostBackActionsToRequestReset());
private Template createTemplateToReset(String text) {
return new ButtonsTemplate(null, null, text, createPostBackActionsToRequestReset());
}

private List<Action> createPostBackActionsToRequestReset() {
Expand All @@ -71,9 +77,8 @@ private Message createMessageToRequestReminderDate() {
createButtonsTemplateToRequestReminderDate());
}

private com.linecorp.bot.model.message.template.Template
createButtonsTemplateToRequestReminderDate() {
return com.linecorp.bot.model.message.template.ButtonsTemplate.builder()
private Template createButtonsTemplateToRequestReminderDate() {
return ButtonsTemplate.builder()
.text("リマインダー日時をセットしますよー")
.actions(createDateTimePickerActionsToRequestReminderDate())
.build();
Expand Down Expand Up @@ -102,7 +107,69 @@ public void setReminderMessage(String sourceId, String reminderMessage) {

public void replyReminderConfirmMessage(String replyToken, Date date) {
mRepository.replyMessage(
replyToken, new TextMessage("リマインダーをセットしましたよー\n" + mTranslator.formatDate(date)));
replyToken,
createMessageToConfirmReminder("リマインダーをセットしましたよー\n" + mTranslator.formatDate(date)));
}

private Message createMessageToConfirmReminder(String text) {
return new TemplateMessage(
"テンプレートメッセージはiOS版およびAndroid版のLINE 6.7.0以降で対応しています。",
createButtonsTemplateToConfirmReminder(text));
}

private Template createButtonsTemplateToConfirmReminder(String text) {
return ButtonsTemplate.builder()
.text(text)
.actions(createPostbackActionsToRequestReminderCancellation())
.build();
}

private List<Action> createPostbackActionsToRequestReminderCancellation() {
return Collections.singletonList(createPostbackActionToRequestReminderCancellation());
}

private Action createPostbackActionToRequestReminderCancellation() {
return new PostbackAction("キャンセル", ACTION_DATA_REQUEST_REMINDER_CANCELLATION);
}

public void replyReminderCancellationConfirmMessage(String replyToken) {
mRepository.replyMessage(replyToken, createMessageToConfirmCancellationReminder());
}

private Message createMessageToConfirmCancellationReminder() {
return new TemplateMessage(
"テンプレートメッセージはiOS版およびAndroid版のLINE 6.7.0以降で対応しています。",
createConfirmTemplateToConfirmCancellationReminder());
}

private Template createConfirmTemplateToConfirmCancellationReminder() {
return new ConfirmTemplate(
"本当にキャンセルしますかー?", createPostbackActionsToConfirmCancellationReminder());
}

private List<Action> createPostbackActionsToConfirmCancellationReminder() {
return Arrays.asList(
createPostbackActionToCancelReminder(), createPostbackActionToNotCancelReminder());
}

private Action createPostbackActionToCancelReminder() {
return new PostbackAction("はい", ACTION_DATA_CANCEL_REMINDER);
}

private Action createPostbackActionToNotCancelReminder() {
return new PostbackAction("いいえ", ACTION_DATA_NOT_CANCEL_REMINDER);
}

public void replyCanceledReminderMessage(String replyToken) {
mRepository.replyMessage(replyToken, createTemplateMessageToReset("キャンセルしましたー"));
}

public void replyNotCanceledReminderMessage(String replyToken) {
mRepository.replyMessage(replyToken, new TextMessage("そのままですー"));
}

public void setCancellationConfirm(String sourceId, boolean cancellationConfirm) {
mRepository.setCancellationConfirm(sourceId, cancellationConfirm);
}

public RequestBody getRequestBody(HttpServletRequest req) {
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/com/mizo0203/lilywhite/repo/Repository.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ public void destroy() {

public State getState(String sourceId) {
LineTalkRoomConfig config = getOrCreateLineTalkRoomConfig(sourceId);
if (config.isReminderEnqueued()) {
if (config.isCancellationConfirm()) {
return State.REMINDER_CANCELLATION_CONFIRM;
} else if (config.isReminderEnqueued()) {
return State.REMINDER_ENQUEUED;
} else if (config.getReminderMessage() != null) {
return State.HAS_REMINDER_MESSAGE;
Expand Down Expand Up @@ -157,4 +159,10 @@ public void enqueueReminderTask(String sourceId, long etaMillis) {
config.setReminderEnqueuedTaskName(taskName);
mOfyRepository.saveLineTalkRoomConfig(config);
}

public void setCancellationConfirm(String sourceId, boolean cancellationConfirm) {
LineTalkRoomConfig config = getOrCreateLineTalkRoomConfig(sourceId);
config.setCancellationConfirm(cancellationConfirm);
mOfyRepository.saveLineTalkRoomConfig(config);
}
}
1 change: 1 addition & 0 deletions src/main/java/com/mizo0203/lilywhite/repo/State.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ public enum State {
NO_REMINDER_MESSAGE, //
HAS_REMINDER_MESSAGE, //
REMINDER_ENQUEUED, //
REMINDER_CANCELLATION_CONFIRM, //
;
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@ public class LineTalkRoomConfig {
@Id private String sourceId;
private String reminderMessage;
private String reminderEnqueuedTaskName;
private boolean cancellationConfirm;

public LineTalkRoomConfig() {
// LineTalkRoomConfig must have a no-arg constructor
reminderMessage = null;
reminderEnqueuedTaskName = null;
cancellationConfirm = false;
}

/** A convenience constructor */
Expand Down Expand Up @@ -60,4 +62,12 @@ public String getReminderEnqueuedTaskName() {
public void setReminderEnqueuedTaskName(String taskName) {
reminderEnqueuedTaskName = taskName;
}

public boolean isCancellationConfirm() {
return cancellationConfirm;
}

public void setCancellationConfirm(boolean cancellationConfirm) {
this.cancellationConfirm = cancellationConfirm;
}
}

0 comments on commit 1c3b5c8

Please sign in to comment.