서비스 모듈화

강민형·2020년 11월 30일
0

오늘 잔디와 카카오 메세지 서비스를 모듈화 시켰음

기존에 모듈화라고 하면 if문을 떡칠해서 경우에 따른 분기를 해줬었지만 실무에서 그러면 굉장히 없어보이기 때문에 기존에 있는 소스들을 참고했음

소스를 보다보니 대표적으로 소셜로그인이 보였음

소셜의 종류(Provider)에 따라 해당하는 소셜로 연결해서 로그인하도록 구현이 되있었고 이를 enum으로 구현했음

나도 그래서 enum으로 구현함

기존에 내가 구현한 잔디 메세지를 enum으로 안에 들어갈 메세지명과 알람컬러를 지정해서 사용했었는데 카카오와 잔디를 통합할 수 있는 enum을 만들기로함

public enum Status {
    REQ(value -> "주문확인 고객님의 주문을 매장에서 확인중입니다.  주문이 접수되면 안내드리겠습니다. \\n\\n\n\n- 주문일시 : 11월30일 \\n\n- 주문번호 : 23R2G9923J23 \\n\n- 가게 : 청정수산 \\n\n- 메뉴 : 연어회 \\n\n- 배달주소 : 경기도 광명시 \\n\n",
            "퀵서비스 주문이 들어왔습니다",
            "tp-0000000003",
            "#66ff99"),
    RCV(value -> "템플릿 테스트 " + value.getName() + " " + value.getStoreName(),
            "jMessage",
            "tp-0000000001",
            "#66ff99"),
    SND(value -> "템플릿 테스트 " + value.getName() + " " + value.getStoreName(),
            "jMessage",
            "tp-0000000001",
            "#66ff99"),
    SNT(value -> "템플릿 테스트 " + value.getName() + " " + value.getStoreName(),
            "퀵서비스 상품이 배송되었습니다",
            "tp-0000000001",
            "#ffff66"),
    CXL(value -> "템플릿 테스트 " + value.getName() + " " + value.getStoreName(),
            "퀵서비스 주문이 취소되었습니다",
            "tp-0000000001",
            "#FF0000");

    private final Function<QuickOrderMessageVO, String> kMessage;
    private final String jMessage;
    private final String templateCode;
    private final String color;

    Status(Function<QuickOrderMessageVO, String> kMessage, String jMessage, String templateCode, String color) {
        this.kMessage = kMessage;
        this.jMessage = jMessage;
        this.templateCode = templateCode;
        this.color = color;
    }

    public String getKMessage(QuickOrderMessageVO value) {
        return kMessage.apply(value);
    }

    public String getJMessage(){
        return jMessage;
    }

    public String getTemplateCode(){
        return templateCode;
    }

    public String getColor(){
        return color;
    }

    public static Status of(String name) {
        return valueOf(name.toUpperCase());
    }
}

우선 안에 메세지 내용은 아직 테스트 단계이기때문에 신경 ㄴㄴ

주문에 단계를 enum으로 지정해서 단계별 메세지와 알람컬러, 호출할 템플릿 코드를 저장했음

그다음 메세지를 보낼 분기를 사용하기 위해 MessageService를 만들었음

public class MessageService {

		...

    public void sendMessage(String orderCode, Status status){

        /*
        각 상태별 메세지 전송
        정확히 어떤 상태일때 메세지를 보낼지 정립 필요
         */

        QuickOrderMessageVO orderMessage = cmsWriteMapper.selectOrder(orderCode);
        kakaoMessage.sendMessage(status, orderMessage);

        switch (status){
            case REQ:
            case CXL:
                jandiMessage.sendMessage(status, orderMessage);
                break;
            case RCV:
                break;
            case SND:
                break;
            case SNT:
                break;
            default:
                throw new RuntimeException("Not supported status!!!");
        }
    }
}

아직은 상태별 메세지를 어떻게 보낼지 정립이 되어있지 않기때문에 모든 상태에 카카오 메세지를 보내고 REQ, CXL상태일때 잔디메세지를 보내는걸로 최초구현함

그리고 해당 서비스를 호출해야하는 api 에서

messageService.sendMessage(code, Status.of(status.get("status")));

서비스를 호출해서 클라이언트로부터 오는 status값을 활용해 메세지를 보낼수 있게 함

참고 : https://woowabros.github.io/tools/2017/07/10/java-enum-uses.html

profile
Since 2020.11.02 / BackEnd Developer / SSAFY 3기

0개의 댓글