본문 바로가기
토이프로젝트/텔레그램 리마인더 봇

[JAVA/텔레그램봇] 4. 리마인더 봇 개발하기 - 리마인더 등록 기능 추가

by 상후 2022. 10. 9.
728x90
반응형

 

 

 

토이프로젝트 - 텔레그램 리마인더 봇 만들기 - 등록 기능 추가


리마인더를 등록하는 기능을 개발하였습니다.

명령어는 /add를 접두어로 시작하고, 양식은 아래와 같습니다.

 

/add (ID) (시간) (등록메시지)

/add 테스트ID 12:00 12시에 약먹자

 

위와 같이 등록할 수 있도록 개발하였습니다.

 

전체 코드는 깃헙을 확인해주시고 핵심 코드만 설명하겠습니다.

 

@Getter
@ToString
public class Reminder {

    private final String chatId;
    private final String id;
    private final String msg;
    private final LocalTime reqTime;

    // 생성자
    public Reminder(String chatId, String messageText) {
        try {
            String[] info = messageText.split(" ");
            if (info.length < 4) { // >> /add ID 23:59 MSG
                throw new ProcessException(Message.ADD_EXCEPTION, chatId);
            }

            this.chatId = chatId;
            this.id = info[1];
            this.msg = concatMsg(info);
            this.reqTime = LocalTime.parse(info[2], DateTimeFormatter.ofPattern("H:mm"));
        } catch (DateTimeException de) {
            throw new ProcessException(Message.TIME_EXCEPTION, chatId);
        }
    }

    /**
     * 등록메시지 연결 메서드
     *
     * @param info
     */
    private String concatMsg(String[] info) {
        StringBuilder sb = new StringBuilder();

        for (int i = 3; i < info.length; i++) {
            sb.append(info[i]).append(" ");
        }

        return sb.deleteCharAt(sb.length() - 1).toString();
    }
}

 

 

위는 리마인더의 정보를 담는 클래스입니다.

사용자가 보낸 정보를 바탕으로 해당 클래스의 인스턴스가 생성됩니다.

생성된 인스턴스는 리마인더를 등록하고, 관리하는 책임을 가진 인스턴스에서 활용됩니다.

 

 

@Service
public class Tasks {

    private Tasks() {}
    private final static List<Reminder> TASK_LIST = new ArrayList<>();

    /**
     * reminder 등록
     *
     * @param reminder
     * @return
     */
    public String addReminder(Reminder reminder) {
        if (idDuplicateCheck(reminder)) {
            throw new ProcessException(Message.DUPLICATE_ID, reminder.getChatId());
        }

        TASK_LIST.add(reminder);
        return Message.ADD_SUCCESS;
    }

    /**
     * 같은 id 사용 검사
     *
     * @param reminder
     * @return
     */
    private boolean idDuplicateCheck(Reminder reminder) {
        boolean isDuplicate = false;

        for (Reminder target : TASK_LIST) {
            if (reminder.getChatId().equals(target.getChatId()) && reminder.getId().equals(target.getId())) {
                isDuplicate = true;
                break;
            }
        }

        return isDuplicate;
    }

}

 

위 클래스가 위에서 말한 리마인더를 등록하고, 관리하는 책임을 가진 클래스입니다.

@Service를 통해 스프링 빈으로 생성하였고, 생성자를 private으로 지정하여 싱글톤 즉 다른 곳에서 해당 인스턴스를 생성하지 못하도록 제한하였습니다.

static final 변수로 리마인더를 담는 List를 생성하였습니다. 해당 List에 사용자가 등록한 리마인더들이 등록됩니다.

간단한 등록 메서드와 필요한 유효성 검사들을 추가하였습니다.

 

 

 

테스트 코드 및 예외처리 등 전체 코드는 아래 주소를 참고해주시기 바랍니다. 

 

 

https://github.com/SanghooMoon/telegram-reminder-bot/pull/3/files

 

feat : 리마인더 등록 기능 추가 by SanghooMoon · Pull Request #3 · SanghooMoon/telegram-reminder-bot

/add 명령어 추가

github.com

 

 

728x90
반응형

댓글